find命令具有大量选项,可以帮助您在Linux系统上准确定位需要查找的文件。这篇文章讨论了一系列非常有用的选项。在Linux系统上有很多查找文件的命令,使用它们时你有很多选择。例如,您不仅可以按文件名查找文件,还可以按文件所有者或组、创建时间、大小、分配的权限、上次访问时间、关联的inode,甚至文件是否属于系统上不再存在的帐户或组等来查找文件。您还可以指定搜索从哪里开始,搜索应该深入到文件系统中的什么位置,搜索结果将告诉您它找到了多少文件。而所有这些需求都可以通过find命令来处理。下面提供了根据这些要求查找文件的示例。在某些命令中,错误(例如试图列出您无权读取的文件)输出将发送到/dev/null以便我们不必查看它。或者,我们可以简单地以root身份运行来避免这个问题。请记住,还有更多其他选择。本文涵盖了很多,但不是find命令可以帮助您定位文件的所有方式。选择起点使用查找,您可以选择起点或从您所在的位置开始。要选择搜索的起点,请在查找一词后输入它。例如,find/usr或find./bin将在您当前位置下的/usr目录或bin目录中开始搜索,而find~将在您的主目录中开始搜索,即使您当前位于当前文件系统的其他位置。选择您要查找的内容的最常见搜索策略之一是按名称搜索文件。这需要使用-name选项。默认情况下,find显示它找到的文件的完整路径。如果将-print添加到命令中,您将看到相同的结果。如果您想查看与文件相关的详细信息——例如:文件长度、权限等,您需要在查找命令的末尾添加-ls参数。$find~/bin-nametryme/home/shs/bin/tryme$find~/bin-nametryme-print/home/shs/bin/tryme$find~/bin-nametryme-ls9175284-rwx------1shsshs139Apr82019/home/shs/bin/tryme您也可以使用子字符串来查找文件。例如,如果将上例中的tryme替换为try*,您将找到名称以try开头的所有文件。(LCTT译注:如果要使用通配符*,将搜索字符串放在单引号或双引号内,以避免通配符被shell解释)按名称查找文件可能是find命令最典型的用法,但还有很多其他用法查找文件的方法,并且有这样做的需要。以下部分显示如何使用其他可用方法。此外,在按大小、组、inode等搜索文件时,您需要确保找到的文件与您要查找的文件相匹配。使用-ls选项显示详细信息非常有用。按大小查找文件按大小查找文件需要使用-size选项并使用适当的规格进行一些小技巧。例如,如果您指定-size189b,您将找到块大小为189字节而不是189字节的文件。(LCTT译注:如果不跟上单位,默认单位是b。一个block大小为512字节,小于或恰好512字节会占用一个block。)bytes,需要使用--size189c(字符)。此外,如果您指定--size200w,您将找到200个“单词”的文件——“双字节增量”中的单词,而不是“我们彼此交谈的那些事”中的单词。您还可以通过提供以千字节(k)、兆字节(M)和千兆字节(G)为单位的大小来查找文件。(LCTT译注:EvenT,P)在大多数情况下,Linux用户会搜索大于所选大小的文件。例如,要查找大于1GB的文件,您可以使用这样的命令,其中+1G表示“大于1GB”:$find-size+1G-ls2>/dev/null7877151053976-rw-rw-r--1shsshs1079263432Dec212018./backup.zip8018341052556-rw-rw-r--1shsshs1077809525Dec212018./2019/hold.zip按inode编号查找文件你的文件可以找到通过维护文件元数据(即除文件内容和文件名之外的所有内容)的索引节点。$find-inum919674-ls2>/dev/null9196744-rw-rw-r--1shsshs512Dec2715:25./bin/my.log通过Finding查找具有特定文件所有者或组的文件按所有者或组分类文件也很简单。这里我们使用sudo来解决权限问题。$sudofind/home-usernemo-name"*.png"-ls17052194drwxr-xr-x2nemonemo4096Jan2808:50/home/nemo/Pictures/me.png在下面的命令中,我们看对于一个名为admins的多用户组所拥有的文件。#find/tmp-groupadmins-ls2621994-rwxr-x---1doryadmins27Feb1618:57/tmp/testscript要查找没有所有者或组的文件,您可以使用-nouser选项,如下所示命令查找不属于当前系统上任何用户的文件。#find/tmp-nouser-ls2622044-rwx------11016101617Feb1716:42/tmp/hello注意列表中显示了旧用户的UID和GID,可以清楚的看出用户未在系统上定义。此命令查找由其帐户已从系统中删除的用户在主目录之外创建的文件,或者在自用户帐户被删除后未被删除的主目录中创建的文件。同样,-nogroup选项将找到此类文件,尤其是当这些用户是相关组的唯一成员时。按上次更新时间查找文件在此命令中,我们在特定用户的主目录中查找最近24小时内更新的文件。sudo用于搜索另一个用户的主目录。$sudofind/home/nemo-mtime-1/home/nemo/home/nemo/snap/cheat/home/nemo/tryme按上次权限更改时间查找文件-ctime选项可帮助您在特定参考时间查找文件状态(例如权限)在范围内发生变化的文件。以下是查找其权限在最后一天内发生更改的文件的示例:$find.-ctime-1-ls7879874-rwxr-xr-x1shsshs189Feb1107:31./tryme请记住,显示的日期和时间仅反映文件内容的最后更新。您需要使用类似stat的命令来查看与文件关联的三种状态(文件创建、修改和状态更改)。按上次访问时间查找文件在此命令中,我们使用-atime选项查找最近两天内访问过的本地pdf文件。$find-name"*.pdf"-atime-2./Wingding_Invites.pdf根据文件相对于另一个文件的年龄查找文件您可以使用-newer选项查找比其他文件更新的文件。$找到。-newerdig1-ls78643468drwxr-xr-x67shsshs69632Feb1619:05。10644424drwxr-xr-x5shsshs4096Feb1611:06./snap/cheat7918464-rw-rw-r--1shsshs649Feb1314:26./dig没有相应的-较旧的选项,但您可以获得类似的结果!-较新(即较旧),它们基本相同。按类型查找文件要按文件类型查找文件,您有多种选择-常规文件、目录、块和字符文件等。以下是文件类型选项的列表:b块特殊文件(缓冲)c字符特殊文件(无缓冲)d目录p命名管道(FIFO)f常规文件l符号链接s套接字下面是查找符号链接的示例:$寻找。-typel-ls8057170lrwxrwxrwx1shsshs11Apr102019./volcano->volcano.pdf9185520lrwxrwxrwx1shsshs1Jun162018./letter->pers/letter-2mom限制搜索深度maxdepth选项控制在文件系统中搜索的深度(从当前位置或起点)。$find-maxdepth3-name"*loop"./bin/save/oldloop./bin/long-loop./private/loop查找空文件在此命令中,我们查找空文件,但不查找目录及其子文件目录。$找到。-maxdepth2-empty-typef-ls9175170-rw-rw-r--1shsshs0Sep2311:00./complaints/newfile7920500-rw-rw-r--1shsshs0Oct419:02./junk按权限查找文件您可以使用-perm选项查找具有特定权限集的文件。在下面的示例中,我们只查找常规文件(-typef)以避免看到符号链接,默认情况下它们被授予此权限,即使它们引用的文件受到限制。$find-perm777-typef-lsfind:'./.dbus':Permissiondenied7987484-rwxrwxrwx1shsshs15Mar282019./runme使用find帮你删除文件如果你使用下面的命令,你可以使用find命令定位和删除文件:$find。-namerunme-execrm{}\;{}表示根据搜索条件找到的每个文件的名称。一个非常有用的选项是用-ok替换-exec。执行此操作时,find会在删除任何文件之前要求确认。$找到。-namerunme-okrm-rf{}\;
