如何表达"将linux命令映射到文件中的每一行"?

twi*_*imo 1 linux awk

我经常需要删除不在特定svn源树中的所有文件.要获取所有文件名列表,我使用:

svn st | grep ^? | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

这个命令会给我一个文件名列表,每行一个名字.那怎么能表达出来的想法呢?

for (each line in ${svn st | grep ^? | awk '{print $2}' )
    rm -f line
Run Code Online (Sandbox Code Playgroud)

gaw*_*awi 5

使用xargs:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

注意:在您的命令中,您不处理具有空格的文件,因为{print $2}.你还必须小心,xargs因为它在空格上分割它的输入.因此,-0如果文件名中有空格,则使用该选项会更安全.

这是一个更正确的xargs用法示例:

find -type f| tr \\n \\0 | xargs -0 wc
Run Code Online (Sandbox Code Playgroud)

或者,使用find -print0选项:

find -type f -print0 | xargs -0 wc 
Run Code Online (Sandbox Code Playgroud)

xargs是最强大的UNIX工具之一.我每天都使用它.