在 最近的 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 千兆字节”)文件
find /var/log -size +1G
或者,也许您想在 /data
中查找所有由 bcotton 拥有的文件
find /data -owner bcotton
您还可以根据权限查找文件。也许您想在您的主目录中查找所有世界可读的文件,以确保您没有过度共享。
find ~ -perm -o=r
这篇文章仅触及了 find
可以做什么的表面。将测试与布尔逻辑结合使用可以为您提供令人难以置信的灵活性,以精确查找您要查找的文件。借助 -exec
或 -delete
等参数,您可以让 find
对其... 找到的内容采取行动。您有任何喜欢的 find
表达式吗?在评论中分享它们!
12 条评论