웹사이트에서 일부 페이지를 다운로드해야 합니다.
내가 하고 싶은 것은 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
OutDir
xargs -r
xargs -r curl
curl
이런 방식으로 "curl" 출력을 파일로 리디렉션하는 방법에 대한 제안 사항이 있습니까?
답변1
sed<->xargs<->curl 사용 전략이 작동하지 않는 이유는 에서 >
설명합니다 .shell
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
완벽한;
답변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