Answers:
首先要输入的内容:
man find
man xargs
find
默认情况下,该命令会将结果打印到标准输出,因此-print
通常不需要此选项,而是-print0
使用0(NULL)字节分隔文件名,以便可以正确解释包含空格或换行符的名称。
该-exec
选项是您可以代替xargs使用的东西-find命令对找到的每个项目执行一个命令。
该xargs
命令读取以空格或换行符分隔的字符串(通常从find命令,但是它们可以来自任何地方),并对每个字符串执行一些命令。
如果xargs使用-0选项运行,它将期望由NULL分隔的字符串作为输出find ... -print0
xargs的优点在于它可以将字符串分组在一起,因此它只执行一次或两次命令,而不是执行n次。
因此在正常使用中:
find start_directory -name '*.txt' | xargs ls -l
find会列出文件名,而xargs会发出如下命令:
ls -l file1.txt file2.txt file3.txt ... fileN.txt
这比发出find命令更快:
ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
注意,当前可能完全支持此POSIX语法的find实现不再需要xargs:
find directory -name '*.txt' -exec ls -l {} +
它比xargs变体更简单,并且速度稍快。
find directory -name '*.txt' | xargs ls -l