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 に答える