Find命令提供了多种选项,可帮助您准确定位Linux系统上需要查找的文件。这些文章讨论了一系列非常有用的选项。- Sandra Henry-stocker(作者)

Linux系统包含许多用于查找文件的命令,使用这些命令时也有多种选项。

例如,您不仅可以按文件名查找文件,还可以通过文件的所有者或组、创建时间、大小、分配的权限、上次访问时间、相关信息节点,甚至文件是否属于系统中不再存在的帐户或组来查找文件。

您还可以指定搜索结果,告诉您开始搜索的位置、需要深入文件系统的位置以及找到的文件数。

所有这些要求都可以通过find命令处理。

以下是根据这些要求查找文件的示例。某些命令中的错误(例如,尝试列出没有读取权限的文件)输出将发送到/dev/null,因此不需要查看。或者,您可以简单地以root身份运行,以避免此问题。

记住,有更多的选择。这篇文章涵盖了很多内容,但find命令并不能帮助找到找到文件的所有方法。

选择起点

使用Find,您可以选择起点或从该位置开始。要选择要选择的搜索的起点,请在find单词后输入。例如,find /usr或find。/bin从/usr目录或当前位置下的bin目录开始搜索,find ~从主目录开始搜索,即使它位于当前文件系统中的其他位置。

请选择要找的

最常用的搜索策略之一是按名称搜索文件。为此,必须使用-name选项。

默认情况下,find显示找到的文件的完整路径。将-print添加到命令中可以查看相同的结果。要查看与文件相关的详细信息(如文件长度、权限等),必须在find命令末尾添加-ls参数。

$ find ~/bin -name tryme

/home/shs/bin/tryme

$ find ~/bin -name tryme -print

/home/shs/bin/tryme

$ find ~/bin -name tryme -ls

也可以使用以下子字符串查找文件:9175284-rwx-1sh SHS 139 apr 82019/home/SHS/bin/tryme。例如,在上面的示例中,如果将tryme重命名为try*,则可以找到所有名称以try开头的文件。(LCTT翻译:要使用通配符*,请将搜索字符串用单引号或双引号括起来,以防止通配符被shell解释。)

按名称查找文件可能是find命令最常用的用途,但有多种其他方法来查找文件,必须这样做。以下部分介绍了如何使用其他可用方法。

此外,按文件大小、组、索引节点等标准搜索文件时,必须确保找到的文件与要查找的文件相匹配。使用-ls选项显示详细信息很有用。

按大小查找文件

要按大小查找文件,必须使用-size选项,并在该规范中使用一些技术。例如,指定-size 189b可查找块大小为189的文件,而不是189字节的文件。(LCTT翻译:如果不跟随单位,默认单位为B。一个块大小为512字节,不足或正好512字节占用一个块。)字节必须使用-size189c(字符)。如果指定-size200W,就能找到200个单词(word)文件——不是“我们互相交谈的事情”的单词,而是“增加2字节”的单词。您还可以通过提供千字节(K)、兆字节(M)、千兆字节(G)的大小来查找文件。(LCTT翻译注:甚至T、P)

大多数情况下,Linux用户搜索大于选定大小的文件。例如,要查找大于1 GB的文件,可以使用这些命令。其中1G表示“大于1 GB”:

$ find -size 1G -ls 2/dev/null

787715 1053976-rw-rw-r-1 SHS SHS 1079263432 dec 212018。

801834 1052556-rw-rw-r-1 SHS SHS 1077809525 dec 212018。按/2019索引节点编号查找文件

您可以通过用于维护文件元数据(即文件内容和文件名以外的所有内容)的索引节点来查找文件。

$ find -inum 919674 -ls 2/dev/null

9196744 -rw-rw-

r--  1 shs  shs   512 Dec 27 15:25 ./bin

查找具有特定文件所有者或组的文件

按所有者或组查找文件也非常简单。这里我们使用 sudo 来解决权限问题。

$ sudo find /home -user nemo -name "*.png" -ls 1705219  4 drwxr-xr-x  2 nemo nemo  4096 Jan 28 08:50 /home/nemo/Picture

在下面这个命令中,我们寻找一个被称为 admins 的多用户组拥有的文件。

# find /tmp -group admins -ls    262199      4 -rwxr-x---   1 dory     admins         27 Feb 16 18:57 /tmp/testscript

查找没有所有者或组的文件

你可以使用如下命令所示的 -nouser 选项来查找不属于当前系统上的任何用户的文件。

# find /tmp -nouser -ls 262204 4 -rwx------ 1 1016 1016 17 Feb 17 16:42 /tmp/hello

请注意,该列表显示了旧用户的 UID 和 GID,这清楚地表明该用户未在系统上定义。这种命令将查找帐户已从系统中删除的用户创建在主目录之外的文件,或者在用户帐户被删除后而未被删除的主目录中创建的文件。类似地,-nogroup 选项也会找到这样的文件,尤其是当这些用户是相关组的唯一成员时。

按上次更新时间查找文件

在此命令中,我们在特定用户的主目录中查找过去 24 小时内更新过的文件。sudo 用于搜索另一个用户的主目录。

$ sudo find /home/nemo -mtime -1 /home/nemo /home/nemo/snap/cheat /home/nemo/tryme

按上次更改权限的时间查找文件

-ctime 选项可以帮助你查找在某个参考时间范围内状态(如权限)发生更改的文件。以下是查找在最后一天内权限发生更改的文件的示例:

$ find . -ctime -1 -ls    787987   4 -rwxr-xr-x   1 shs   shs     189 Feb 11 07:31 ./tryme

请记住,显示的日期和时间只反映了对文件内容进行的最后更新。你需要使用像 stat 这样的命令来查看与文件相关联的三个状态(文件创建、修改和状态更改)。

按上次访问的时间查找文件

在这个命令中,我们使用 -atime 选项查找在过去两天内访问过的本地 pdf 文件。

$ find -name "*.pdf" -atime -2 .

根据文件相对于另一个文件的时间来查找文件

你可以使用 -newer 选项来查找比其他文件更新的文件。

$ find . -newer dig1 -ls    786434     68 drwxr-xr-x  67 shs      shs         69632 Feb 16 19:05 .   1064442      4 drwxr-xr-x   5 shs      shs          4096 Feb 16 11:06 ./snap/cheat    791846      4 -rw-rw-r--   1 shs      shs           649 Feb 13 14:26 ./dig

没有相应的 -older 选项,但是你可以用 ! -newer (即更旧)得到类似的结果,它们基本上一样。

按类型查找文件

通过文件类型找到一个文件,你有很多选项——常规文件、目录、块和字符文件等等。以下是文件类型选项列表:

b      块特殊文件(缓冲的) c      字符特殊文件(无缓冲的) d      目录 p      命名管道(FIFO) f      常规文件 l      符号链接 s      套接字

这里有一个寻找符号链接的例子:

$ find . -type l -ls    805717   0 lrwxrwxrwx   1 shs    shs    11 Apr 10  2019 ./volcano -> volcano.pdf    918552   0 lrwxrwxrwx   1 shs    shs     1 Jun 16  2018 ./letter -> pers/letter2mom

限制查找的深度

-mindepth 和 -maxdepth 选项控制在文件系统中搜索的深度(从当前位置或起始点开始)。

$ find -maxdepth 3 -name "*loop" ./bin/save/oldloop ./bin/long-loop ./private/loop

查找空文件

在这个命令中,我们寻找空文件,但不进入目录及其子目录。

$ find . -maxdepth 2 -empty -type f -ls    917517      0 -rw-rw-r--   1 shs   shs      0 Sep 23 11:00 ./complaints/newfile    792050      0 -rw-rw-r--   1 shs   shs      0 Oct  4 19:02 ./junk

按权限查找文件

你可以使用 -perm 选项查找具有特定权限集的文件。在下面的示例中,我们只查找常规文件(-type f),以避免看到符号链接,默认情况下符号链接被赋予了这种权限,即使它们所引用的文件是受限的。

$ find -perm 777 -type f -ls find: ‘./.dbus’: Permission denied    798748      4 -rwxrwxrwx   1 shs      shs            15 Mar 28  2019 ./runme

使用查找来帮助你删除文件

如果使用如下命令,你可以使用 find 命令定位并删除文件:

$ find . -name runme -exec rm {} \;

{} 代表根据搜索条件找到的每个文件的名称。

一个非常有用的选项是将 -exec 替换为 -ok。当你这样做时,find 会在删除任何文件之前要求确认。

$ find . -name runme -ok rm -rf {} \; < rm ... ./bin/runme > ?

删除文件并不是 -ok 和 -exec 能为你做的唯一事情。例如,你可以复制、重命名或移动文件。

确实有很多选择可以有效地使用 find 命令,毫无疑问还有一些在本文中没有涉及到。我希望你已经找到一些新的,特别有帮助的。


via:

作者: Sandra Henry-Stocker 选题: lujun9972 译者: heguangzhi 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击“了解更多”可访问文内链接

1.《【怎么从命令里找word】通过“查找”命令找到你要找的东西。》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【怎么从命令里找word】通过“查找”命令找到你要找的东西。》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2505786.html