find 命令有巨多的选项可以帮助你准确定位你在 Linux 系统上需要寻找的文件。这篇文章讨论了一系列非常有用的选项。
在 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
917528 4 -rwx 1 shs shs 139 Apr 8 2019 /home/shs/bin/tryme
你也可以使用子字符串来查找文件。例如,如果你将上面示例中的 tryme
替换为 try*
,你将会找到所有名称以 try
开头的文件。(LCTT 译注:如果要使用通配符 *
,请将搜索字符串放到单引号或双引号内,以避免通配符被 shell 所解释)
按名称查找文件可能是 find
命令最典型的用法,不过还有很多其他的方式来查找文件,并且有这样做的需要。下面的部分展示了如何使用其他可用的方式。
此外,当按文件大小、组、索引节点等条件来搜索文件时,你需要确认找到的文件与你要查找的文件是否相匹配。使用 -ls
选项来显示细节是非常有用。
通过大小查找文件
按大小查找文件需要使用 -size
选项并且对相应规范使用一点技巧。例如,如果你指定 -size 189b
,你将找到 189 个块大小的文件,而不是 189 个字节。(LCTT 译注:如果不跟上单位,默认单位是 b
。一个块是 512 个字节大小,不足或正好 512 个字节将占据一个块。)对于字节,你需要使用 --size 189c
(字符)。而且,如果你指定 --size 200w
,你将会找到 200 个“ 字 ”的文件——以“双字节增量”为单位的字,而不是“我们互相谈论的那些事情”中的单词。你还可以通过以千字节(k
)、兆字节(M
)和千兆字节(G
)为单位提供大小来查找文件。(LCTT 译注:乃至还有 T
、P
)
大多数情况下,Linux 用户会搜索比选定大小要大的文件。例如,要查找大于 1 千兆字节的文件,你可以使用这样的命令,其中 +1G
表示“大于 1 千兆字节”:
$ find -size +1G -ls 2>/dev/null
787715 1053976 -rw-rw-r-- 1 shs shs 1079263432 Dec 21 2018 ./backup.zip
801834 1052556 -rw-rw-r-- 1 shs shs 1077809525 Dec 21 2018 ./2019/hold.zip
通过索引节点号查找文件
你可以通过用于维护文件元数据(即除文件内容和文件名之外的所有内容)的索引节点来查找文件。
$ find -inum 919674 -ls 2>/dev/null
919674 4 -rw-rw-r-- 1 shs shs 512 Dec 27 15:25 ./bin/my.log
查找具有特定文件所有者或组的文件
按所有者或组查找文件也非常简单。这里我们使用 sudo
来解决权限问题。
$ sudo find /home -user nemo -name "*.png" -ls
1705219 4 drwxr-xr-x 2 nemo nemo 4096 Jan 28 08:50 /home/nemo/Pictures/me.png
在下面这个命令中,我们寻找一个被称为 admins
的多用户组拥有的文件。
# find /tmp -group admins -ls
262199 4 -rwxr-x
via: <https://www.networkworld.com/article/3527420/how-to-find-what-you-re-looking-for-on-linux-with-find.html>
作者:[Sandra Henry-Stocker](https://www.networkworld.com/author/Sandra-Henry_Stocker/) 选题:[lujun9972](https://github.com/lujun9972) 译者:[heguangzhi](https://github.com/heguangzhi) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
发表回复