在 最近的 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 条评论