Shell-Script

重定向 sed 到 curl 然後到文件

  • March 4, 2017

我需要從網站下載一些頁面。

我想要做的是使用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&gt;shelland 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 &lt;/a&gt;"&gt; &lt;/span&gt;&lt;span&gt; \(.*\)|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 &lt;/a&gt;"&gt; &lt;/span&gt;&lt;span&gt; \(.*\)|\1 \3/\2|p' |
   xargs -r -n 2 sh -c 'shift $1; curl $1 &gt; $2' 2 1

完畢;

引用自:https://unix.stackexchange.com/questions/347728