• 締切済み

curlでファイル名にURLの一部を利用するには?

Mac環境(OS10.8.5)のターミナル利用 プログラミングは知識が無く、ネットで調べても自力では解決しなかったので、皆様のお知恵を頂ければ幸いです。 「url.txt」には下記のようなURLが複数記載されています。 ~.com/test/1594/data ~.com/test/6416/data ~.com/test/5168/data ※「1594」「6416」などの個所は、実際には規則性の無いランダムの10桁の数字となっております cat test/url.txt | xargs -P3 -t -n1 curl -O 上記の状態では、出力されるファイルは「test」と言うファイル名のファイルが1つしか出来ません。(全て上書き保存されてしまうため) これを「1594.html」「6416.html」「5168.html」と言うように、1つ1つファイルを保存したいと思っております。 どのように記述をすれば良いのかアドバイスを頂けますでしょうか。 何卒、よろしくお願い致します。

みんなの回答

回答No.1

とりあえずこんな感じでファイル名は取れないかな?あとはよしなに・・・ cat test/url.txt | while read line do echo `cat $line | awk -F "/" '{print $(NF-1)”.html”}'` done

vvv_052
質問者

お礼

アドバイスありがとうございます。 教えて頂いたコマンドを、どのように下記のコマンドに利用すれば良いのでしょうか? cat test/url.txt | xargs -P3 -t -n1 curl -O 教えて頂いたコマンドを、どのように利用したら良いのかも分からないくらいのレベルです。 url.txtに記載されているURLの末尾が、全部違っていれば問題は無かったのですが、末尾が全部同じのため保存時のファイル名でつまづいてしまっています。 ここまで何とか自力で調べて出来たのですが、あと一歩をアドバイス頂ければ助かります。 教えて頂いたコマンドをそのまま打ち込んだところ、下記のように記載されているURLの数だけ表示されました。 cat: ~.com/test/1594/data: No such file or directory awk: syntax error at source line 1 context is {print >>> $(NF-1)? <<< awk: illegal statement at source line 1 何かエラーがあるみたいです。 コマンドの使い方自体が間違っているのでしょうか。 よろしくお願い致します。

vvv_052
質問者

補足

url.txtに記載されているURLについてですが、ここでは「~」を使って省略していますが、実際は各行にはhttpから始まるアドレスが記載されています。

関連するQ&A

  • crulでリスト記載のURLの一部をファイル名に

    Mac環境(OS10.8.5)のターミナル利用 プログラミングは知識が無く、ネットで調べても自力では解決しなかったので、皆様のお知恵を頂ければ幸いです。 「url.txt」には下記のようなURLが複数記載されています。 ~.com/test/1594/data ~.com/test/6416/data ~.com/test/5168/data ※「1594」「6416」などの個所は、実際には規則性の無いランダムの10桁の数字となっております url.txtに記載されているURLについてですが、ここでは「~」を使って省略していますが、実際は各行にはhttpから始まるアドレスが記載されています。 cat test/url.txt | xargs -P3 -t -n1 curl -O 上記の状態では、出力されるファイルは「test」と言うファイル名のファイルが1つしか出来ません。(全て上書き保存されてしまうため) これを「1594.html」「6416.html」「5168.html」と言うように、1つ1つファイルを保存したいと思っております。 url.txtに記載されているURLの末尾が、全部違っていれば問題は無かったのですが、末尾が全部同じのため保存時のファイル名でつまづいてしまっています。 ここまで何とか自力で調べて出来たのですが、あと一歩をアドバイス頂ければ助かります。 何卒、よろしくお願い致します。

  • curlで外部ファイル記載を1行ずつ処理するには?

    いつもお世話になっております。 よろしくお願い致します。 プログラムの知識が無いため、自力で調べて何とか下記の所までテストが出来ております。 curl 'https://www.hogehoge.com/aaaaa/bbbbb/ccccc/ddddd/page[8-12]' -H 'Host: www.hogehoge.com' -o "page#1.html" ※実際は上記には「Referer」や「User-Agent」など付いていますが、長くなってしまうのでここでは削除してあります。 実際にやりたい事は、上記の[8-12]の個所に、連番では無い様々な数字を入れて実行したいと思っています。 入力する数字が1行ごとに記載されている外部ファイルを読み込んで、[8-12]の個所に代入して実行するにはどのようにすれば良いでしょうか? 例えば外部ファイル(test.txt)には下記のように記載されています。 41433135 25342545 54236462 33436336 57375353 ※もっと続きます 1行ずつ読み込んで「41433135.html」「25342545.html」「54236462.html」などと、それぞれファイルに保存するようにしたいです。 ***.shと言うファイルにプログラムを作って記述すれば、上記の事ができそうな気がしますが、いろいろと調べてみても私ではどのように応用して記述すれば良いのか分からずお手上げな状態です。 おそらくプログラムに詳しい方であれば、この問題はすぐに解決できるレベルのような気がしますが、記述方法を教えて頂ければ助かります。 私の環境はMacで、ターミナルを利用しております。 すでにこの問題で2週間ほど調べてみましたが、もう限界な状態です。 どなたかお助け下さい。 何卒、よろしくお願い致します。

  • cURLでcookieを送受信する方法について

    いつもお世話になっています。 phpで、Webページに自動でログイン+ページ遷移するためのスクリプトを作成しています。 Webページなどを参照し $url='http://webpage.jp'; $cookie=tempnam(sys_get_temp_dir(),'cookie_'); $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie); curl_exec($curl); curl_close($curl); $curl=curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, "cookie"); curl_setopt($curl, CURLOPT_COOKIEFILE, "tmp"); curl_setopt($curl, CURLOPT_POST, TRUE); $output = curl_exec($curl); print_r(curl_getinfo($curl)); curl_close($curl); とすることで、cookieをファイルとして保存しページ遷移できることを確認しました。 そこで、cookieをディスクに書き込まずにメモリ上に保存してやりとりが出来ないかと思い $cookie = fopen('php://memory', 'r+'); として見ましたが、うまくいきませんでした。 cookieをメモリ上に保存して利用する方法はありますか? お願いします。

    • ベストアンサー
    • PHP
  • 連番で出力したい

    以下のような感じで、url.txtに書いてあるURLを落として連番で保存したいんですが、やり方がわかりません(wgetに限らずほかのコマンドも連番したいときがよくあります)。 環境はcygwinです。シェルの種類は何でも結構です。どなたか教えてください! cat url.txt | xargs wget -o output■連番■.html

  • .htaccessでURLの一部を書き換えるには?

    .htaccessでURLの一部を書き換える(抜き取る)方法について、質問致します。 例えば http://example.com/user/ランダムな文字列のディレクトリ/ のような構成になっているものを http://example.com/ランダムな文字列のディレクトリ/ でアクセス出来るようにしたいのですが、調べても書き換えまくっても、どうしても上手く行きません。 解決策そのものだけじゃなく、ヒントや調べ方でも良いので、是非ご教授ください! 現在は下記のように書いています。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/?$ user/$1/ [L] ただ、これだと http://example.com/ランダムな文字列のディレクトリ/ にアクセスするとちゃんと動くのですが、元の http://example.com/user/ランダムな文字列のディレクトリ/ にアクセスしても動いちゃっています。 元のURLにアクセスしたら、新しいURLにリダイレクトされて、そこでは元のURLのデータが表示されて欲しいのですが。。 どなたかご教示のほど、よろしくお願い致します。

  • phpのcurlでのエラー

    ローカル、IIS8.5+PHP5.6環境で、PHPのcurlを用いてPDFファイルをアップロードするとエラーが出ます。 エラーは以下のようなものです。 === {"files":[{"name":"1425191187-473","size":221,"type":"multipart\/form-data; boundary=------------------------c4894a433c24bba9","error":"Filetype not allowed"}]} === どの点が問題なのかご教示いただけないでしょうか? PHP5.6の設定では、php.iniの「extension=php_curl.dll」の「;」のみを外しました。 また、ローカルPCにダウンロードしたcurl.exeコマンドからはアップロードできることを確認しました。 コマンド:「curl -F "files[]=@C:\Users\***\Desktop\***.pdf;type=application/pdf http://127.0.0.1/***/upload」 アップロードできないPHPソースは以下となります。 === $oname = '@C:\Users\***\Desktop\***.pdf;type=application/pdf'; $files = array( 'files[]' => $oname ); $url = 'http://127.0.0.1/***/upload'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8'); curl_setopt($ch, CURLOPT_POSTFIELDS, $files); curl_exec($ch); curl_close($ch); ===

    • 締切済み
    • PHP
  • WordでTXTファイルが「ファイル名付きで」開けません。

    Wordによる、TXTファイルの編集・上書きがうまくできません。関連付けは、してあるので、エクスプローラで表示されたTXTファイルのアイコンをクリックすると、Wordが開いて、ファイル内容が正しく表示されます。 ところが、Wordの最上段にファイル名が表示されません(常に「文書1」のように表示されます)。そのため、編集後「上書き保存」ができません(所在フォルダを探せば保存できますが、非常に面倒です)。 同じXPとWord2000の組合せは10年近く使っており、編集後「上書き保存」が容易にできました(最上段にはファイル名が表示されていました)。ところがOSの再インストールをしてから、このように不便になってしまいました。 よろしくお願いします。

  • Cygwinのリダイレクトでファイルの上書きできない?

     cat src.txt > dst.txt とすると、Linux だと上書きしてくれるのですが、 cygwin だと「すでにファイルが存在します」と エラーメッセージがでて上書きできません。 1.なぜでしょうか?仕様が違うのでしょうか? 2.どうすれば上書きできるようになるでしょうか?

  • バッチファイル 現在のフォルダ名をファイル名に置き換える

    こんにちは。超初心者なのですが教えてください。 ある複数フォルダに格納されている.txtファイルを、現在の フォルダ名を取得して、別フォルダにリネームして 格納するバッチファイルを作成したいと考えています。 for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。 例えば、 データ取得元として以下のファイルがあったら C:\temp\20100101\data1.txt C:\temp\20100101\data2.txt C:\temp\20100101\data3.txt C:\temp\20100102\data1.txt C:\temp\20100102\data2.txt C:\temp\20100103\data1.txt C:\temp\20100103\data2.txt これを別フォルダに、現在のフォルダ名をファイル名にくっつけて 以下のように一つのフォルダに纏めて格納したいと思っています。 ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド を使うかもしれないです。 C:\test\data1_20100101.txt C:\test\data2_20100101.txt C:\test\data3_20100101.txt C:\test\data1_20100102.txt C:\test\data2_20100102.txt C:\test\data1_20100103.txt C:\test\data2_20100103.txt 実装方法として以下までは考えましたが、これ以上は無理そうです。 rem set A=C:\temp rem set B=C:\test for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A" for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B" for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) ) ) ) popd? ) ) 申し訳ありませんが、お助け願います。

  • 存在するURLのデータのみ保存する方法

    あるリンクからデータをダウンロードしたいのですが、存在するURLのデータのみダウンロードするための識別が上手くいきません。何か良い方法は無いでしょうか。 if test -e "http://test"; then curl -O "http://test" fi (URLは適当です)