sed를 컬로 리디렉션한 다음 파일로 리디렉션

sed를 컬로 리디렉션한 다음 파일로 리디렉션

웹사이트에서 일부 페이지를 다운로드해야 합니다.
내가 하고 싶은 것은 sed웹사이트 소스 코드를 사용하여 링크를 얻고 하나씩 전달한 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

완벽한;

답변2

command() 전체를 생성 curl url -o file하고 이를 입력으로 다시 파이프 할 수 없습니까 bash?

echo 'curl http://www.di.uminho.pt -o foo' | bash

시각적 거리를 넘어서

답변3

GNU Parallel을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

lynx -dump ~/site_source_file.htm |
  perl -ne '/^References/ .. 0 and /^\s+\d+..(view-source: )?(.*)/s and print $2;' |
  parallel -j50 wget

관련 정보