与Ubuntu 22.04 LTS查找和行动

在本教程中,我们将介绍多种方法用于在Ubuntu 20.04 LTS中查找文件和目录(即文件夹),例如查找所有文件 。老的 扩展或查找大于2 GB的所有文件和目录。我们还将介绍如何在每个文件上运行一个或多个命令。

请注意,我们将使用的命令之一是 定位,这与Ubuntu并非本地化。这 定位 命令通常比 寻找 因为它维护所有文件的数据库,该数据库每24小时更新一次。这 定位 命令可以安装如下:

sudo apt install mlocate

由于包括Ubuntu在内的Unix式操作系统中的所有内容都被视为文件,因此"文件"一词也将表示"目录",除非另有说出来。此外,桌面环境示例基于 侏儒。要了解如何使用GNOME访问远程Ubuntu计算机,请参见 使用ubuntu 20.04 TLS的Windows远程桌面.

这样,让我们开始。

列表文件

要列出当前目录下的所有文件,可以使用以下命令:

寻找

纯正的 寻找 命令递归列出当前目录中的所有文件:

find

定位

定位 命令类似于 寻找 但是需要一种模式(在这种情况下是通配符):

locate *


速度 定位 不过,有代价。最近修改的文件可能不会反映在数据库中。要解决此问题,您可以使用 sudo UpdatedB (可能需要一些时间)或使用 -e 选项仅列出当时存在的文件 定位 运行命令(基本上等同于 寻找):

locate -e *

ls

使用递归 -R 选项允许标准 ls 命令产生类似的结果:

ls -Rlha

侏儒

您可以使用GNOME桌面环境产生类似的结果:

按名称搜索

在以下示例中,我们将搜索所有文件 。老的 扩大。

寻找

因为我们正在搜索所有文件,所以我们使用 须藤 命令避免权限错误并从根目录开始搜索(/):

sudo find / -iname *.old


请注意 -我的名字 选项忽略案例,而 -姓名 才不是。

定位

在下面, -一世 选项忽略案例:

sudo locate -i *.old


有趣的是,即使有 -e 选项, 定位 命令找不到 /run/blkid/blkid/tab.old 文件(而 寻找 做)。

侏儒

没有通配符的角色(*),GNOME桌面文件应用程序提供了与 寻找 命令:

按大小搜索

假设我们想找到大于50的所有文件 MIB。对于此任务,我们可以添加 命令我们可能的嫌疑人名单:

命令专为此任务而设计:

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的桌面文件应用程序提供了典型的 图形用户界面 结果:

如上所述,对查找大于50 MIB的所有文件,按大小列进行排序并不完全有用。这 要么 寻找 命令更适合此任务。

查找空文件

上面提到的许多命令都有专门用于查找空文件的选项。接下来,我们将研究这些。

寻找

为了 寻找 命令,此任务很简单:

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)。这是一个单个空目录和一个空文件的示例:

定位

再次,因为 定位 数据库不包含文件大小信息,无法仅使用the 定位 命令。

侏儒

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

侏儒

要使用文件应用程序执行相同的操作,请首先搜索所有文件。老的 扩大:

接下来,通过按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计算机/服务器。

3

发表回复