xargsで複数のコマンドを実行する
問題
引数リストは作ったのですが、xargsって、1つずつ処理、1つずつ複数のコマンドで処理ってできますか。
答え
1つずつ渡す
$ ls | xargs -L 1 echo a.txt b.txt c.txt
2つずつ渡す
$ ls | xargs -L 2 echo a.txt b.txt c.txt
1つずつ渡す
$ ls | xargs -l echo a.txt b.txt c.txt
1つずつ渡す。{} で渡して、渡した先で使い方は調整したい。(-I を使うと -L 1 が自動的に指定される)
$ ls | xargs -I {} echo {} a.txt b.txt c.txt
1つずつ渡す。{} で渡して、渡した先で使い方は調整したい。(-i は -I {} と同じ)
$ ls | xargs -i echo {} a.txt b.txt c.txt
$ ls | xargs -i echo {}{}{} a.txta.txta.txt b.txtb.txtb.txt c.txtc.txtc.txt
複数のコマンドに渡したい場合は、コマンド文字列を作って sh -c に渡すと可能。
$ ls | xargs -i sh -c 'gzip {} && mv {}.gz /foo/bar' $ ls $ ls /foo/bar a.txt.gz b.txt.gz c.txt.gz
for文ももちろん可能。
$ for i in `ls`; do gzip $i; mv $i.gz /foo/bar; done $ ls $ ls /foo/bar a.txt.gz b.txt.gz c.txt.gz
コメント