-exec xargs和-print0的用途是什么?


20

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

这三个如何工作?还是什么网站/ URL?

Answers:


25

首先要输入的内容:

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

7

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

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

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

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

xargs使用的资源比'find -exec'少得多
Felipe Alvarez 2010年

7
那是另一回事。传递到xargs将比-exec使用更多的资源。您可能忽略了“ +”终止符。
jlliagre 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.