在本教程中,我们将介绍多种方法用于在Ubuntu 20.04 LTS中查找文件和目录(即文件夹),例如查找所有文件 ,扩展或查找大于2 GB的所有文件和目录,还会给出每个文件上运行一个或多个命令,有需要的朋友可以继续往下看。
请注意,我们将使用的命令之一是 定位,这与Ubuntu并非本地化。它维护所有文件的数据库,该数据库每24小时更新一次。这 定位 命令可以安装如下:
sudo apt install mlocate
由于包括Ubuntu在内的Unix式操作系统中的所有内容都被视为文件,因此”文件”一词也将表示”目录”,除非另有说出来。此外,桌面环境示例基于 侏儒。要了解如何使用GNOME访问远程Ubuntu计算机,请参见 使用ubuntu 20.04 TLS的Windows远程桌面.
这样,让我们开始。
一、列表文件
要列出当前目录下的所有文件,可以使用以下命令:
1.寻找命令
纯正的 寻找 命令递归列出当前目录中的所有文件:
find
2.定位命令
这 定位 命令类似于 寻找 但是需要一种模式(在这种情况下是通配符):
locate *
速度 定位 不过,有代价。最近修改的文件可能不会反映在数据库中。要解决此问题,您可以使用 sudo UpdatedB (可能需要一些时间)或使用 -e 选项仅列出当时存在的文件 定位 运行命令(基本上等同于 寻找):
locate -e *
3.ls
使用递归 -R 选项允许标准 ls 命令产生类似的结果:
ls -Rlha
4.GNOME
您可以使用GNOME桌面环境产生类似的结果:
二、按名称搜索
在以下示例中,我们将搜索所有文件 。
1.寻找命令
因为我们正在搜索所有文件,所以我们使用 须藤 命令避免权限错误并从根目录开始搜索(/):
sudo find / -iname *.old
请注意 -我的名字 选项忽略案例,而 -姓名 才不是。
2.定位命令
在下面, -一世 选项忽略案例:
sudo locate -i *.old
有趣的是,即使有 -e 选项, 定位 命令找不到 /run/blkid/blkid/tab.old 文件(而 寻找 做)。
3.GNOME桌面
没有通配符的角色(*),GNOME桌面文件应用程序提供了与 寻找 命令:
三、按大小搜索
假设我们想找到大于50的所有文件 MIB。对于此任务,我们可以添加 du 命令我们可能的嫌疑人名单:
1.du命令
这 du 命令专为此任务而设计:
sudo du / -ha --threshold=50M
这 -H 选项提供标准(人)文件尺寸和 -一个 选项包括文件和目录:
要抑制(四个)错误消息,您可以使用 2>&- 争论。您也可以按文件大小排序:
sudo du / -ha --threshold=50M 2>&- | sort -h
最后一行显示磁盘总共包含2.8个数据。
寻找命令
以下找到大于50 MIB的所有文件(不包括目录):
sudo find / -size +50M
要查看字节中每个文件的大小,您可以使用 -ls 选项(和 2>&- 删除错误消息):
sudo find / -size +50M -ls 2>&-
第七列提供了每个文件的大小,以字节为单位。要仅查看文件路径,输入和大小,您可以使用 -printf 选项,如图所示:
sudo find / -size +50M -printf "%p %y %s bytes\n" 2>&- | column -t
这 %p 返回文件名, %y 文件类型, %s 字节中的大小,以及 \ n 生成一个newline字符(有关详细信息,执行 男人找到).
这 列-t 命令根据空格字符创建列。请注意,140737477885952字节不到128 PIB,这显然是不正确的。更准确的演绎如下:
sudo find / -size +50M -printf "%p %y %k KiB\n" 2>&- | column -t
在以上, %k 提供KIB的文件大小(而不是 %s 字节)。
定位
因为 定位 命令的数据库不包含文件大小信息,您不能仅列出大于50 MIB的文件 定位.
GNOME
GNOME的桌面文件应用程序提供了典型的 图形用户界面 结果:
如上所述,对查找大于50 MIB的所有文件,按大小列进行排序并不完全有用。这 du 要么 fine 命令更适合此任务。
四、查找空文件
上面提到的许多命令都有专门用于查找空文件的选项。接下来,我们将研究这些。
1.寻找命令
为了 寻找 命令,此任务很简单:
sudo find /tmp -empty -type f,d
此命令找到所有空的文件和目录(即 -ttype f,d) /TMP 文件夹,如图所示:
但是哪个呢?如上所述,我们可以使用 -printf 和 柱子 如下:
sudo find /tmp -empty -type f,d -printf "%p %y %s bytes\n" | column -t
请注意,每个空目录都需要在Ubuntu文件系统中存在4096个字节(4 KIB)。这是一个单个空目录和一个空文件的示例:
2.定位命令
再次,因为 定位 数据库不包含文件大小信息,无法仅使用the 定位 命令。
3.GNOME
GNOME的桌面文件应用程序提供了相对非热心的结果:
一个人必须进行大量单击以使用GNOME桌面环境来识别所有空文件。
五、在文件匹配中执行操作
现在,我们知道如何找到文件,我们可能希望对它们执行操作;例如删除所有 *。老的 文件.
寻找
这 寻找 命令的 -Exec 选项为每个匹配的文件执行一次提供的命令。例如:
sudo find / -iname "*.old" -exec echo {} \;
简而言之,这执行 回声 每个命令 。老的 找到的文件。在这里, {} 语法代表每个匹配文件。因此,如果 vmlinux.old 是一个匹配的文件,然后是命令 echo vmlinux.old 被执行。分号用于指示命令字符串的结尾 -Exec 选项。因为半龙具有特殊的含义,因此必须使用后斜切角色逃脱(\), 如下:
删除全部 *。老的 来自 /主/karlito 目录(或 ~ 目录),您可以运行以下命令:
sudo find . -iname "*.old" -exec rm -f {} \;
我们可以看到该文件中的所有文件 ~ 目录已被删除:
定位
这 定位 命令没有 -Exec 选项。但是,我们可以使用 Xargs 命令:
sudo locate -i "*.old" | xargs -0 echo
这 -0 选项允许 Xargs 正确处理非典型文件名字符。
删除全部 *。老的 来自 /主/karlito 目录,您可以运行:
sudo locate -i "/home/karlito/*.old" | xargs rm
同样,要删除所有 。老的 在 定位 命令的数据库(通常全部 *。老的 磁盘上的文件),您可以运行:
sudo locate -i "*.old" | xargs rm
GNOME
要使用文件应用程序执行相同的操作,请首先搜索所有文件。老的 扩大:
接下来,通过按CTRL + A选择所有匹配文件。然后,按DELETE键,然后选择 删除 按钮:
我们可以在命令提示下确认删除,如下所示:
因为 Xargs 命令是快速,灵活的,并且可以与许多其他命令一起使用,通常在大多数情况下使用它是有意义的。例如,以下将所有包含”备份”的文件复制到用户主文件夹中的名为”备份”的目录中:
sudo find / -type f -iname "*backup*" -print0 | xargs -0 -I {} sh -c 'stat -c "%n %s bytes" {}; cp {} ~/backups'
每个命令和选项的详细说明如下:
- 须藤 允许 寻找 命令搜索而不会遇到权限拒绝错误。
- 寻找 搜索文件的命令(执行 男人找到 有关详细信息)。
- / 从根目录开始搜索。
- -type f 搜索文件(而非目录)。
- -iname”*备份*” 在忽略案件时,指示 寻找 命令查找文件名中某处包含”备份”的所有文件。注意两者的使用(*)通配符角色。
- -print0 格式的输出 寻找 命令使其可以被其他命令所消耗,包括 XARG。尤其是, -print0 允许包含新线或其他类型的空白的文件名,可以通过可以处理该输入的程序正确解释。请注意 –print0 选项对应于 -0 选项 Xargs 命令。
- Xargs 将其标准输入转换为其他命令的参数,例如 统计 和 CP 命令。
- -0 准备 Xargs 命令接收可能包含空白,报价标记或背斜线的输入。
- -我 资本” i”选项允许输入 Xargs 在多个地方使用,例如 {} 令牌。
- SH -C 这将调用一个单独的命令行解释器(Shell)并执行传递给它的命令。在这种情况下, ‘stat -c”%n%s字节” {};cp {}〜/备份’。第二个外壳允许 Xargs 使用多个命令使用 {} 令牌。
- stat -c”%n%s字节” {} 显示名称 %n 和大小 %s 在 {} 令牌(字节)。
- ; 分号允许在同一行上执行两个或多个命令。
- cp {}〜/备份 复制给定的 {} 文件到 〜/备份 目录。
将所有所有这些放在一起结果类似于以下的输出:
在以上,我们可以看到理论上复制到的所有文件 〜/备份。这是理论上的,并非所有文件实际上都被复制了:
这是一个重要的观点 – 在显示方面没有问题 统计 相关信息,但是有问题 CP 命令(未报告)。
六、使用GREP命令完善搜索
接下来,我们将搜索匹配文件的内容,以查找一个或多个关键字。首先,我们将检查所有 *。日志 出现的文件 警告。为此,我们使用无处不在 格雷普 命令:
sudo find / -iname '*.log' -type f -print0 | xargs -0 grep warning
在管道之前运行命令( | )操作员返回的预期列表 *.日志 文件。但是,运行整个命令行返回每个文件权限拒绝错误:
这是因为 格雷普 命令也需要 须藤 海拔。因此,以下命令行会产生所需的结果(两者都 -我的名字 和 -一世 忽略案例):
sudo find / -iname '*.log' -type f -print0 | xargs -0 sudo -i grep warning
找到所有 *。日志 包含文件 警告, 批判的,和/或 错误,我们可以使用逻辑或 | )操作员必须逃脱,以便不要与标准管操作员混淆:
sudo find / -iname '*.log' -type f -print0 | xargs -0 sudo grep -l -i 'warning\|critical\|error'
小写的” L”选项 -l 显示匹配文件列表,而不是关联的内容:
结论
上述内容比较并对比了Ubuntu 22.04 LTS中查找文件的多种方法,给出了在发现文件上执行命令的技术。包括Ubuntu在内的Unix式操作系统提供了极为丰富的命令线环境,希望帮助您管理Ubuntu计算机/服务器。