xargsの使い方メモ
xargsコマンド便利そうと思ってるけどいざ使いたい時にだいたい使い方忘れてて、調べて思い出すにもパッと思い出せなくて初動が重くなりがちなので自分用にまとめておく。
基本
*.txtのファイル郡の中から"検索文字列"が含まれる行の情報を取得したい
find . -name "*.txt" | xargs grep -n "検索文字列"
上記コマンドで実際に実行されるコマンドは
grep -n "検索文字列" file1 fine2 file3,,,
一度に渡す引数数を調整する
上記ではgrep一回にすべてのfileが引数として指定されていた。
これを特定の回数に制限したいとき(例えば1コマンドにつき10ファイルまでとか)は以下のようにする
find . -name "*.txt" | xargs -L 10 grep -n "検索文字列"
これで実際に実行されるのは
grep -n "検索文字列" file1 fine2 file3,,,file10 grep -n "検索文字列" file11 fine12 file13,,,file20 ...
みたいな感じ
引数場所指定
引数を特定の位置に指定したいときは以下のように書く
この場合渡される引数は1つずつになる。
grepではあまり意味ないが、cpコマンドとかmvで使うとよさそう
find . -name "*.txt" | xargs -i grep -n "検索文字列" {}
{}ではなく自分で指定した文字列を使いたい場合は以下
find . -name "*.txt" | xargs -IXXX grep -n "検索文字列" XXX
ドライラン
-pオプションで実行前に実行されるコマンドを予め確認できる
find . -name "*.txt" | xargs -p grep -n "検索文字列"
同時実行最大数
-Pオプションで同時実行最大数を指定できる
find . -name "*.txt" | xargs -P 5 -L 10 grep -n "検索文字列"
上記で、最大5つのgrepプロセスが同時起動して実行される認識(実際にプロセス状況を見て確認したわけじゃないのでたぶん。)