- ベストアンサー
crulでリスト記載のURLの一部をファイル名に
- Mac環境(OS10.8.5)のターミナルを利用して、curlでリスト記載のURLの一部をファイル名にする方法を教えてください。
- 質問者はプログラミングの知識がなく、ネットで調べても解決できなかったため、皆さんの知恵を求めています。
- url.txtには複数のURLが記載されており、それぞれのURLの末尾の数値部分をファイル名として保存したいと思っています。しかし、全てのURLの末尾が同じであるため、ファイル名の作成に苦労しています。アドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 「xargs」を利用したのは、リストに記載されているURLが数百以上あるので、マルチスレッドのように同時に処理させたいと思い、「xargs」と言うコマンドを見つけて利用する事に致しました。 -P オプションですね。正確にはマルチプロセスですが並行動作は同じです。マルチスレッドは1つのプロセス内で複数のスレッドを並列動作させる事です。表面上はあまり区別しなくていいですが、プログラマは厳密に区別します。 > わがままな希望だと思いますが、教えて頂いたプログラムに「xargs」などを利用して、マルチスレッドで並行処理させる事は可能でしょうか? wrapper script 用意するのが簡単でしょう。まず curl を呼び出すシェルスクリプトを作成し (ファイル名はなんでもいいですが) ----- curl.sh #!/bin/sh i="$1" o="${i%/*}" exec curl -o "${o##*/}.html" "$i" ------ chmod +x curl.sh cat test/url.txt | xargs -P3 -t -n1 ./curl.sh 元の xargs に渡すように段階踏めばいいです。-n1 してるので $1 しかみてません。
その他の回答 (1)
- trapezium
- ベストアンサー率62% (276/442)
> url.txtに記載されているURLについてですが、ここでは「~」を使って省略していますが、実際は各行にはhttpから始まるアドレスが記載されています。 ~ は $HOME (ホームディレクトリ) を意味するので、勘違いされやすいので使わない方がいいです。質問文良く読まないと気付かない。 > これを「1594.html」「6416.html」「5168.html」と言うように、1つ1つファイルを保存したいと思っております。 無理に xargs 使わなくとも、URL の後ろから2番目を取り出して -o に渡してやれば良さそうだけど、 cat test/url.txt | while read i; do o=${i%/*}; curl -o "${o##*/}.html" "$i"; done もちろん試してはいない。${i%/*} や ${o##*/} はシェルのマニュアル参照。sh や bash 前提
お礼
trapezium 様、アドバイスありがとうございます。 プログラミングの知識ゼロの状態から、数日かけて自力でここまで持ってきていたので、「~」がホームディレクトリを意味する事も知りませんでした。 大変申し訳ありませんでした。 教えて頂いたコマンドを実行した所、問題無く思っていたような結果を得る事が出来ました。 ありがとうございます。とても感謝しております。 「xargs」を利用したのは、リストに記載されているURLが数百以上あるので、マルチスレッドのように同時に処理させたいと思い、「xargs」と言うコマンドを見つけて利用する事に致しました。 わがままな希望だと思いますが、教えて頂いたプログラムに「xargs」などを利用して、マルチスレッドで並行処理させる事は可能でしょうか? お手数をおかけしますが、ご教授頂ければ幸いです。 よろしくお願い致します。
補足
◆訂正◆ 質問で『出力されるファイルは「test」と』と記載しておりましたが、これは「data」の間違いでした。 わざわざ訂正する必要も無いかもしれませんが、私のような知識が無い人がこの質問を参考にした時に勘違いしてしまわないように、訂正を致します。 ◆補足◆ ご回答を頂く間に、自分でも他に方法が無いか調べていた事も追記致します。 出力指定で「>>」を記入すると上書きされずに、1つのファイルに追記されるのが分かりました。 cat test/url.txt | xargs -P2 -t -n1 curl >> testdata.html 上記の方法でも1つのファイルに結合された状態で、DLできる事が確認出来ました。 最悪この方法で何とかするしかないと思っていたのですが、trapezium 様からご教授して頂いたプログラムで1つ1つ分割して保存する事が出来たので、1つの結合ファイルとして保存する必要が無くなって良かったです。
お礼
お礼が遅れてしまい、大変申し訳ありません。 教えて頂いたプログラムで実行したところ、多段スレッドのように同時に処理する事が確認出来ました。 数日調べても自力では解決出来なかった事なので、大変感謝しております。 まだいくつか自力で解決出来ないか頑張っている事もありますので、自力解決が難しくなった時は、またここでご質問させて頂こうと思います。 ありがとうございました。