ファイルが大量にある場合に使うxargs
引数が2つ以上必要な場合、cpやmvなどの方法
# ls | xargs -I % -t cp -r % /tmp
-I %の部分で指定した文字列に%を置換してくれる!
何気に便利。。
例えば、ディレクトリ内の.logだけtmpにコピー(cp)したい場合。
# ls -l
合計 16
-rw-r--r--. 1 root root 0 7月 5 13:43 1.log
-rw-r--r--. 1 root root 0 7月 5 13:43 2.log
-rw-r--r--. 1 root root 4 7月 5 13:38 a.txt
-rw-r--r--. 1 root root 4 7月 5 13:38 b.txt
-rw-r--r--. 1 root root 4 7月 5 13:39 c.txt
drwxr-xr-x. 2 root root 4096 7月 5 13:41 tmp
.logのファイルだけコピー
# ls | grep .log | xargs -I % -t cp % tmp/
cp 1.log tmp/
cp 2.log tmp/
# ls tmp/
1.log 2.log
これで.logのファイルをtmp/にコピーする。
「-I %」で%がにファイル名が入る。
「-t」オプションを付けるとコマンド実行前にコマンドを出力(cp 1.log tmp/)する。
# cp *.log tmp/
これで同じことができるんですけどね。
言いたいことは「-I」で任意の置換文字に標準入力より渡されたデータを入れることができるってこと。
いつか役に立つときが来ると思います。