假设我有一个脚本可以输出这样的内容
/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
在除第一个文件之外的所有内容上运行?
假设我有一个脚本可以输出这样的内容
/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
在除第一个文件之外的所有内容上运行?
怎么样
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
script | while read first rest; do
echo rm $rest
done
确保不加$rest
引号,以便进行分词。
多种方式:
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...)
your_script|perl -F -ane 'shift @F if($.==1);print "@F"'|xargs rm -rf