命令行快速提示:使用 find 和 xargs 定位和处理文件

[ad_1]

寻找 是日常工具箱中功能更强大、更灵活的命令行程序之一。 它顾名思义:它会查找与您指定的条件匹配的文件和目录。 并有类似的论点 -exec 或者 -删除,您可以让 find 对它……发现的内容采取行动。

在命令行快速提示系列的这一部分中,您将了解 寻找 命令并学习如何使用它来处理带有内置命令的文件或 参数 命令。

查找文件

最低限度, 寻找 使用一个路径来查找内容。例如,此命令将查找(并打印)系统上的每个文件:

find /

由于一切都是一个文件,因此您将获得大量输出以进行分类。 这可能无法帮助您找到要查找的内容。 您可以更改 path 参数以缩小范围,但它仍然没有比使用 ls 命令。 因此,您需要考虑要查找的内容。

也许您想在您的主目录中找到所有 JPEG 文件。 这 -名称 参数允许您将结果限制为与给定模式匹配的文件。

find ~ -name '*jpg'

可是等等! 如果其中一些有大写扩展名怎么办? -我的名字 就好像 -名称,但不区分大小写:

find ~ -iname '*jpg'

伟大的! 但是 8.3 名称方案是 1985 年。某些图片可能具有 .jpeg 扩展名。 幸运的是,我们可以将模式与“或”组合起来,由 -这. 括号被转义,因此外壳不会尝试解释它们而不是 寻找 命令。

find ~ ( -iname '*jpeg' -o -iname '*jpg' )

我们越来越近了。 但是,如果您有一些以 jpg 结尾的目录怎么办? (为什么你命名一个目录 存储桶 代替 图片 超出我的范围。)我们可以使用 -类型 仅查找文件的参数:

find ~ ( -iname '*jpeg' -o -iname '*jpg' ) -type f

或者,也许您想找到那些命名奇怪的目录,以便您以后可以重命名它们:

find ~ ( -iname '*jpeg' -o -iname '*jpg' ) -type d

事实证明您最近拍摄了很多照片,因此将范围缩小到上周更改的文件 -mtime (修改时间)。 这 -7 表示在 7 天或更短时间内修改的所有文件。

find ~ ( -iname '*jpeg' -o -iname '*jpg' ) -type f -mtime -7

使用 xargs 采取行动

参数 command 从标准输入流中获取参数并基于它们执行命令。 继续上一节中的示例,假设您要将上周修改过的主目录中的所有 JPEG 文件复制到您将附加到数码照片显示器的拇指驱动器中。 假设您已经将 U 盘安装为 /media/photo_display。

find ~ ( -iname '*jpeg' -o -iname '*jpg' ) -type f -mtime -7 -print0 | xargs -0 cp -t /media/photo_display

寻找 命令与以前的版本相比略有修改。 这 -print0 命令对输出的写入方式进行了细微的更改:它没有使用换行符,而是添加了一个空字符。 这 -0 (零)选项 参数 调整解析以期望这一点。 这很重要,否则对包含空格、引号或其他特殊字符的文件名的操作可能无法按预期工作。 每当您对文件执行操作时,都应该使用这些选项。

-t 论据 cp 很重要,因为 cp 通常期望目的地在最后。 你可以不这样做 参数 使用 寻找-exec 命令,但 参数 方法会更快,特别是对于大量文件,因为它将作为单个调用运行 cp.

了解更多

这篇文章只触及了表面 寻找 可以做。 寻找 支持基于权限、所有权、访问时间等的测试。 它甚至可以将搜索路径中的文件与其他文件进行比较。 将测试与布尔逻辑相结合可以为您提供令人难以置信的灵活性来准确地找到您正在寻找的文件。 使用内置命令或管道 参数,您可以快速处理大量文件。

本文的部分内容先前发表于 开源网. 拍摄者 黄华伦不飞溅.

[ad_2]

Related Posts