xargs

  • あるコマンドの結果をパイプして別のコマンドに渡す際に、引数を制御するコマンド。
  • 並列処理もできる。

基本形

$ COMMAND1 | xargs OPTION COMMAND2
OPTION 説明
-L COMMAND2 に与える引数の最大数 (改行までを 1 データとみなす)
-n COMMAND2 に与える引数の最大数 (whitespace までを 1 データとみなす)
-P COMMAND2 で同時に実行する最大数 (並列処理)
-I (アイ) COMMAND2 に与える引数を指定した文字列で指定 (この場合、-L オプションは無視され、引数は 1 つずつ処理される)
-0 (ゼロ) COMMAND1 で得られたデータを null 文字で区切られたものとして処理する
  • 例: seq で生成した 1〜10 の数字を 3 個ずつ改行しながら表示 (echo) する。
    $ seq 1 10 | xargs -L 3 echo
    1 2 3
    4 5 6
    7 8 9
    10
    $ seq -s ' ' 1 10 | xargs -n 3 echo 
    1 2 3
    4 5 6
    7 8 9
    10
    • 2 番目は、数字の間の区切り文字をスペースとして指定していることに注意。
  • 例: カレントディレクトリの大量のファイルを別ディレクトリ (MOVE_TO) に移動させる (通常のmv * MOVE_TOargument list too long というエラーが出る場合)
    $ find . -type f -print0 | xargs -I XXX -0 mv XXX MOVE_TO
    • mv コマンド内の引数の位置を指定したいため、find で得られたそれぞれのファイルパスは -I オプションで mv コマンド内の XXX に渡すと指定している (-I オプションがない場合は、MOVE_TO が指定できない)。
  • 例: カレントディレクトリにある複数のディレクトリを zip で圧縮する (ただし、4 CPU で同時に圧縮していく)
    $ find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 -P 4 -I XXX zip -r XXX.zip XXX
    • maxdepth はサブディレクトリを処理しないために入れている。
    • mindepth はカレントディレクトリ (./) を処理しないために入れている。
  • linuxコマンド/xargs.txt
  • 最終更新: 2018/12/18 11:31
  • by mumeiyamibito