次の内容を含むファイルがあるとします。
bob
john
sue
これは(この場合)URLパターン(たとえば、、、http://example.com/persons/bob.tar
)john.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
置き換えられます。xargs
replacement-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