R.A. Epigonos et al.

[xargs] xargs で引数位置を任意指定するには "sh -c" を使う

特に、手作業で適当なリストを作って、リストの内容応じて同じ処理を何度も行う場合に有効。

以下はファイル名と移動先のリストを順次処理する例


#!/bin/sh
set -eux;

cat << EOT | xargs --no-run-if-empty --max-procs 2 --max-args 2 --delimiter "\n" --verbose sh -eux -c 'mv "${0}" "${1}"'
some.file00
/path/to/directory0
some.file10
/path/to/directory1
some.file01
/path/to/directory0
some.file11
/path/to/directory1
EOT

xargs に与えるリストを sed 等で加工することも可能。また、xargsは実行したコマンドの戻り値が 255 の場合に停止するので、sh -c で与えたコマンドの結果を評価して、を exit 255 等で終わらせることも可能。


#!/bin/sh
set -eux;
 
sed \
        --expression "s# /path/#\n/path/#;" \
<< EOT | xargs --no-run-if-empty --max-procs 2 --max-args 2 --delimiter "\n" --verbose sh -eux -c 'mv "${0}" "${1}" || exit 255;'
some.file00 /path/to/directory0
some.file10 /path/to/directory1
some.file01 /path/to/directory0
some.file11 /path/to/directory1
EOT

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-09-06T20:17:47+09:00
  2. Modified: 2007-09-06T20:17:47+09:00
  3. Generated: 2023-08-27T23:09:11+09:00