sedをカールにリダイレクトしてからファイルにリダイレクトします。

sedをカールにリダイレクトしてからファイルにリダイレクトします。

ウェブサイトから一部のページをダウンロードする必要があります。
私がやりたいことは、sedWebサイトのソースコードを使用してリンクを取得して1つずつ渡し、ダウンロードしたファイルをcurl正しいディレクトリの正しいファイルに出力することです。
もっと明確に説明しようとします。
ページソースコードには次の行があります。

... href="view-source: http://www.site.org/the/file-42.php">
/the/file-42.php </a>"&gt; </span><span> OutDir and some more things ...

必要なもの(リンク - ファイル名 - ディレクトリ名)を次のように取得しました。

for i in `cat ~/site_source_file.htm `; do
    echo $i | grep http://www.site.org |
    sed -n 's|^.*\(http://\(www.site.org/the/file-[0-9]*\)\.php\).*.php </a>"&gt; </span><span> \(.*\)|\1 > \3/\2|p' |
        xargs -r 
done;

出力は次のとおりです。

http://www.site.org/the/file-42.php > OutDir/the/file-42

私がしなければならないのは、http://www.site.org/the/file-42.phpというディレクトリにあるファイルに内容をリダイレクトすることです。そのため、単独で使用するのではなく、出力をファイルにリダイレクトする方法を使用する方が良いようです。しかし、これはうまくいきません。/the/file-42OutDir
xargs -rxargs -r curlcurl

このように "curl"出力をファイルにリダイレクトする方法に関する提案はありますか?

ベストアンサー1

sed<->xargs<->curl 使用戦略が機能しない理由については、 で>説明します。shellxargs

ここでできることはいくつかあります。1) curl -o実行できる操作は次のとおりです。

for i in `cat ~/site_source_file.htm `; do
    echo $i | grep http://www.site.org |
    sed -n 's|^.*\(http://\(www.site.org/the/file-[0-9]*\)\.php\).*.php </a>"&gt; </span><span> \(.*\)|curl \1 -o \3/\2|p' |
    bash 
done

使用したい場合は、xargs次のことができます。

 for i in `cat ~/site_source_file.htm `; do
    echo $i | grep http://www.site.org |
    sed -n 's|^.*\(http://\(www.site.org/the/file-[0-9]*\)\.php\).*.php </a>"&gt; </span><span> \(.*\)|\1 \3/\2|p' |
    xargs -r -n 2 sh -c 'shift $1; curl $1 > $2' 2 1

完璧。

おすすめ記事