1

假设我有一个脚本可以输出这样的内容

/path/to/file1 /path/to/file2 /path/to/file3
/path/to/file4 /path/to/file5 /path/to/file6
/path/to/file91 /path/to/file23
/path/to/file130 /path/to/file34 /path/to/file/69 /path/to/file42

我怎样才能获取每一行,例如,rm第一个文件之外的所有内容上运行?

4

4 回答 4

2

怎么样

  your_script | sed 1d | xargs rm

这应该可以工作,因为 rm 需要多个参数,所以这就是将要执行的:

# excluded by sed: /path/to/file1 /path/to/file2 /path/to/file3
rm /path/to/file4 /path/to/file5 /path/to/file6 \
   /path/to/file91 /path/to/file23 \
   /path/to/file130 /path/to/file34 /path/to/file/69 /path/to/file42

如果您希望每个单词单独执行:

 for f in `your_script | sed 1d`; do rm $f; done

正如 Smylers 所指出的,这也是通过以下方式实现的:

  your_script | sed 1d | xargs -n 1 rm
于 2013-01-18T06:03:27.097 回答
1
script | while read first rest; do 
    echo rm $rest
done

确保不加$rest引号,以便进行分词。

于 2013-01-18T10:25:07.513 回答
0

多种方式:

your_script | tail -n +2 | xargs rm                      #Delete first line from stdout, run rm on other lines
your_script | { read x; xargs rm ; }                     #Read first line, ignore it. Run rm on others.
your_script | { read x; while read x; do rm $x; done ; } #Read first line, ignore it. Run rm on others, line by line. (slower...)
于 2013-01-18T06:11:24.150 回答
0
your_script|perl -F -ane 'shift @F if($.==1);print "@F"'|xargs rm -rf
于 2013-01-18T08:29:59.193 回答