-exec xargs 和 -print0 有什么用途?

-exec xargs 和 -print0 有什么用途?

我认为这些是将一个命令的结果作为输入传递给下一个命令的常用方法。

这三个工具如何工作?或者有哪些网站/URL?

答案1

首先要输入的内容:

man find

man xargs

find命令默认将结果打印到标准输出,因此-print通常不需要该选项,但-print0用 0(NULL)字节分隔文件名,以便正确解释包含空格或换行符的名称。

您可以使用该-exec选项来代替 xargs - find 命令会对其找到的每个项目执行一个命令。

xargs命令读取空格或换行符分隔的字符串(通常来自寻找命令,但它们可能来自任何地方)并为每个字符串执行一些命令。
如果 xargs 使用-0选项,它将期望以 NULL 分隔的字符串作为输出find ... -print0

xargs 的优点是它可以将字符串组合在一起,这样它只执行一次或两次命令,而不是n次。

因此在正常使用中:

find start_directory -name '*.txt' | xargs ls -l 

寻找将列出文件名,并且参数会发出如下命令:

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

答案2

请注意,当前的 find 实现可能都支持此 POSIX 语法,因此不再需要 xargs:

find directory -name '*.txt' -exec ls -l {} + 

它比 xargs 变体更简单并且速度稍快。

find directory -name '*.txt' | xargs ls -l 

答案3

答案4

通过以下方式创建两个文件

触摸'我的文件1'myfile2

查找 . -name “m*” | xargs ls -l (错误)

find . -name "m*" -print0 | xargs --null ls - l (正确结果)

-print0 用空格分隔文件名

相关内容