“查找”命令并将其输出通过另一个程序进行管道传输

Cha*_*bel 1 command-line

这不是 Ubuntu 特定的问题,它适用于所有 unix/linux。

我怎样才能运行这样的命令:

 find .  -maxdepth 1 -type d  -print -exec svn info "{}"   | grep URL  \; 
Run Code Online (Sandbox Code Playgroud)

上面的命令没有做我想要的,我似乎无法将 svn 信息的输出通过管道传输到 grep。

这有效,但输出包含的内容比我需要的要多得多:

 find .  -maxdepth 1 -type d  -print -exec svn info "{}"  \; 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Kee*_*ook 5

一般来说,我发现xargs使用比 find 的 -exec 选项要理智得多。这对于加快速度尤其如此,因为没有为 find 的每一行输出启动单独的“svn”:

find . -maxdepth 1 -type d | xargs svn info | grep URL
Run Code Online (Sandbox Code Playgroud)

如果您正在处理具有奇怪名称(空格、换行符等)的文件,只需添加-print0到 find 和-0xargs:

find . -maxdepth 1 -type d -print0 | xargs -0 svn info | grep URL
Run Code Online (Sandbox Code Playgroud)

如果您正在处理只能接受 1 个参数的程序,则可以使用-n1xargs:

find . -maxdepth 1 -type d -print0 | xargs -0 -n1 svn info | grep URL
Run Code Online (Sandbox Code Playgroud)