Shell-Script
重定向 sed 到 curl 然後到文件
我需要從網站下載一些頁面。
我想要做的是使用
sed
站點原始碼來獲取連結,將它們一一傳遞給curl
然後將下載的文件輸出到正確目錄中的正確文件上。我會嘗試更明確。
在頁面原始碼中有這樣的行:
... href="view-source: http://www.site.org/the/file-42.php"> /the/file-42.php </a>"> </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>"> </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-42
名為 So 的目錄上的文件,OutDir
而不是
xargs -r
單獨我認為 usign將輸出xargs -r curl
重定向curl
到文件。但它不起作用。
您有什麼建議如何以這種方式將“curl”輸出重定向到文件?
您使用 sed<->xargs<->curl 的策略不起作用的原因是 the
>
由shell
and not解釋xargs
。您可以在這裡做一些事情:
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>"> </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>"> </span><span> \(.*\)|\1 \3/\2|p' | xargs -r -n 2 sh -c 'shift $1; curl $1 > $2' 2 1
完畢;