在 最近的一篇 Opensource.com 文章中,Lewis Cowles 介绍了 find
命令。
find
是日常工具箱中功能最强大和灵活的命令行程序之一,因此值得花更多时间研究它。
至少,find
需要一个路径来查找东西。 例如
find /
将会查找(并打印)系统上的每个文件。 由于一切都是文件,您将获得大量输出需要筛选。 这可能无助于您找到您正在寻找的东西。 您可以更改路径参数来稍微缩小范围,但它仍然不如使用 ls
命令更有帮助。 因此,您需要考虑您要查找的内容。
也许您想找到您主目录中的所有 JPEG 文件。 -name
参数允许您将结果限制为与给定模式匹配的文件。
find ~ -name '*jpg'
但是等等! 如果其中一些具有大写扩展名怎么办? -iname
类似于 -name
,但它不区分大小写。
find ~ -iname '*jpg'
太棒了! 但是 8.3 命名方案太老了,是 1985 年的。 一些图片可能具有 .jpeg 扩展名。 幸运的是,我们可以使用 -o
表示的“或”来组合模式。
find ~ ( -iname 'jpeg' -o -iname 'jpg' )
我们越来越接近了。 但是如果你有一些以 jpg 结尾的目录怎么办? (我无法理解你为什么将一个目录命名为 bucketofjpg
而不是 pictures
。) 我们可以使用 -type
参数修改我们的命令 仅查找文件。
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f
或者,也许您想找到那些命名奇怪的目录,以便以后可以重命名它们
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d
事实证明您最近拍摄了很多照片,因此让我们将其缩小到最近一周内更改的文件。
find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7
您可以根据文件状态更改时间 (ctime
)、修改时间 (mtime
) 或访问时间 (atime
) 进行时间过滤。 这些以天为单位,因此如果您想要更精细的控制,您可以改用分钟来表示(分别为 cmin
、mmin
和 amin
)。 除非您确切知道您想要的时间,否则您可能会在数字前加上 +
(大于)或 –
(小于)。
但也许您不关心您的照片。 也许您的磁盘空间不足,因此您想找到 log
目录中所有巨大的(让我们将其定义为“大于 1 GB”)文件
find /var/log -size +1G
或者,也许您想找到 /data
中 bcotton 拥有的所有文件
find /data -owner bcotton
您还可以根据权限查找文件。 也许您想找到您主目录中所有世界可读的文件,以确保您没有过度共享。
find ~ -perm -o=r
这篇文章只触及了 find
可以做的功能的表面。 将测试与布尔逻辑结合使用可以为您提供令人难以置信的灵活性,以准确地找到您正在寻找的文件。 并且通过像 -exec
或 -delete
这样的参数,您可以让 find
对它所... 找到的东西采取行动。 有没有喜欢的 find
表达式? 在评论中分享它们!
12 条评论