xargsでcpやmvを実行する

ファイルが大量にある場合に使う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」で任意の置換文字に標準入力より渡されたデータを入れることができるってこと。

いつか役に立つときが来ると思います。

関連記事
最新記事