SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

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

関連するメモ

コメント