ファイルの入力でxargsを使用する

ファイルの入力でxargsを使用する

次の内容を含むファイルがあるとします。

bob
john
sue

これは(この場合)URLパターン(たとえば、、、http://example.com/persons/bob.tarjohn.tarに直接対応しますsue.tar

私はこれらの線を完全に結びたいと思いますxargs。実行中のコマンドに何が渡されるのかわかりません。プロンプト(たとえば、各行をエコーし​​たいと仮定する)またはbashスクリプトからパラメータcat file | xargs echo $PARAMにどのようにアクセスしますか?

答え1

マイケル回答そうですね。問題を解決する必要があります。走る

cat file | xargs -I % curl http://example.com/persons/%.tar

bob.tar john.tar. sue.tar期待どおりにファイルがダウンロードされます。

しかし、:ここで猫は役に立たない

代わりに、以下を使用してください。

<file xargs -I % curl http://example.com/persons/%.tar

答え2

xargs'stdinから抽出した個々の行を常に最後に貼り付けるのではなく、コマンドの途中に挿入する方法を尋ねているようです。その場合-I、フラグは1つの引数を使用し、コマンドから標準入力から読み取られた行にreplacement-string置き換えられます。xargsreplacement-string

$ cat file | xargs -I foobar curl http://example.com/foobar.tar

答え3

$人パラメータ
...
       --arg-ファイル=ファイル
       - 書類1個
              標準入力の代わりにファイルから項目を読み込みます。これを使うと
              オプションを使用すると、コマンドの実行時に stdin は変更されません。その他 -
              賢明に、stdinは/ dev / nullからリダイレクトされます。
...

--delimiter=/-dをに設定することもできます'\n'


一方、ファイルの各行をURLに変換しようとすると

$sed-e 's#.*#http://example.com/persons/&.tar#' ファイル

それがすべてです。すべてのアイテムをインポートするにはパイプに 。| wget -i

答え4

GNU Parallelでは、次のことができます。

cat urls | parallel curl {} ">" {/}

または:

cat persons | parallel curl http://example.com/persons/{}.tar ">" {}.tar

詳しくは、GNU Parallelの紹介ビデオをご覧ください。 http://www.youtube.com/watch?v=OpaiGYxkSuQ

関連情報