長いファイル名のリスト(フルパスを含む)を含むファイルがあります。また、このリストのプログラムとファイル名を引数として使用して複数回実行したいプログラムもあります。残念ながら、私が実行したいプログラムはホームブリッジスクリプトなので、唯一のオプションは次のとおりです。一つファイル名を入力すると許可されません。標準入力(ファイル名のリストなど) - したがって、パイピングや入力リダイレクトはできません。
私に必要なのは実行されるコマンドですその他コマンド(マイスクリプト)、ファイルの行をパラメータとして使用します。
find
-action -exec
...(find . -name "*.txt" -exec command \;
)に似ています。私の考えでは、私は実際にできるここで使用されていますが、find
入力ファイルを並べ替えたいのですが...
だから私に必要なのはこれです:
for_each_command1 -f ファイルリスト -c './my_command{}' for_each_command2 -f ファイルリスト-exec ./my_command{}\; for_each_command3 -c './my_command {}'この種のタスクを処理する一般的な方法は
$wc -l ファイル一覧 第232話 $ for (( i=1;はい > ./my_command "`sed -n "${i}p"ファイルのリスト`" >完了sed
- 残念ながらオーバーヘッドが多く、あまり良くありません(しかしする働く...):
それでは、これらのことを処理できる組み込みコマンドまたはシェルはありますか?
ベストアンサー1
便利で、xargs -I
お客様の要件を完全に満たしています。
$ xargs <my_file_list.txt -I filename ./my_command "filename"
-I replace-str Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
つまり、改行で区切られた入力行のみを取り、それを単一の引数として使用してコマンドを呼び出します。改行文字以外のものは区切り文字と見なされないため、スペースやその他の特殊文字は問題ありません。
ファイル名に改行を許可するには、ワイルドカードの回答に応じてNULLターミネーターもファイルで機能します。