查找和处理文件find是您日常工具箱中最强大、最灵活的命令行程序之一。顾名思义,它的作用是:查找符合您指定条件的文件和目录。使用-exec或-delete等参数,您可以让它对找到的文件进行操作。在命令行提示系列的这一期中,您将了解find命令并了解如何使用内置命令或使用xargs命令操作文件。要查找文件,find必须至少添加搜索路径。例如,此命令将查找(并打印)系统上的每个文件:find/因为一切都是文件,所以您会看到很多输出。这可能无法帮助您找到所需的内容。您可以更改路径参数以缩小范围,但这并不比使用ls命令更好。因此,您需要考虑要查找的内容。也许您想在您的主目录中找到所有JPEG文件。-name参数允许您将结果限制为与给定模式匹配的文件。find~-name'*jpg'但是等等!如果其中一些扩展名是大写的怎么办?-iname与-name类似,但不区分大小写:find~-iname'*jpg'很好!但8.3命名方案是从1985年开始的。某些图像可能具有.jpeg扩展名。幸运的是,我们可以使用“或”(-o)组合模式。括号需要转义,以便find命令而不是shell程序尝试解释它们。find~\(-iname'jpeg'-o-iname'jpg'\)更进一步。如果您有一些以jpg结尾的目录怎么办?(我不明白你为什么将目录命名为bucketofjpg而不是图片?)我们可以添加-type参数来仅查找文件:find~\(-iname'*jpeg'-o-iname'*jpg'\)-typef或者,也许你想找到那些名字奇怪的目录,这样你以后可以重命名它们:find~\(-iname'*jpeg'-o-iname'*jpg'\)-typed你已经花了很多最近的图片,所以使用-mtime(修改时间)缩小到上周修改的文件。-7表示所有文件在7天或更短时间内修改。find~\(-iname'*jpeg'-o-iname'*jpg'\)-typef-mtime-7使用xargs操作xargs命令从标准输入流中获取参数并根据它们执行命令。继续上一节的示例,假设您要将您上周修改的主目录中的所有JPEG文件复制到USB记忆棒以插入您的数码相册。假设您已将U盘挂载到/media/photo_display。找到~\(-iname'*jpeg'-o-iname'*jpg'\)-typef-mtime-7-print0|xargs-0cp-t/media/photo_display这里的find命令和之前的版本略有不同。-print0命令稍微改变了输出:它没有使用换行符,而是添加了一个空字符。xargs的-0(零)选项调整解析以达到预期的效果。这很重要,否则对包含空格、引号或其他特殊字符的文件名的操作可能无法按预期进行。对文件执行任何操作时应使用这些选项。cp命令的-t参数很重要,因为cp通常要求目的地址在最后。您可以在没有xargs的情况下使用find的-exec来执行此操作,但xargs方法更快,尤其是对于大文件,因为它只调用cp。了解更多本文仅粗略介绍了find的功能。find支持基于权限、所有者、访问时间等的测试。它甚至可以将搜索路径中的文件与其他文件进行比较。将测试与布尔逻辑相结合,为您提供了惊人的灵活性,可以准确地找到您要查找的文件。使用内置命令或管道连接到xargs,您可以快速处理大文件。
