Мне нужно загрузить несколько страниц с сайта.
Я пытаюсь использовать 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 в файл таким образом?
Причина, по которой ваша уловка с использованием sed <-> xargs <-> curl не работает, заключается в том, что >
интерпретируется оболочка
, а не 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
выполнено;
Не можете ли вы полностью создать команду ( curl url -o file
) и передать ее через конвейер в качестве входных данных для bash
?
echo 'curl http://www.di.uminho.pt -o foo' | bash
OTH
{{ 1}}Используя GNU Parallel, вы можете сделать:
lynx -dump ~/site_source_file.htm |
perl -ne '/^References/ .. 0 and /^\s+\d+..(view-source: )?(.*)/s and print $2;' |
parallel -j50 wget