Перенаправление 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 ... 

Я получаю то, что мне нужно (link – filename – dirname) вот так:

 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-42 в каталоге с именем OutDir
Поэтому вместо xargs -r я думал, что xargs -r curl перенаправляет вывод curl в файл.
Но это не сработает.

Есть ли у вас предложение, как я могу перенаправить вывод «curl» в файл таким образом?

3 Solutions collect form web for “Перенаправление sed для завивки, затем в файл”

Причина, по которой ваша уловка использования 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>"&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 

сделанный;

Не можете ли вы полностью создать команду ( curl url -o file ) и эхо-сигнал через канал в качестве входа в bash ?

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

OTH

Используя GNU Parallel, вы можете сделать следующее:

 lynx -dump ~/site_source_file.htm | perl -ne '/^References/ .. 0 and /^\s+\d+..(view-source: )?(.*)/s and print $2;' | parallel -j50 wget 
  • Как я могу найти файлы, а затем использовать xargs для их перемещения?
  • Почему имена файлов трубопроводов в VIM прерываются, когда я возвращаюсь в оболочку?
  • xargs не запрашивает после каждой строки
  • Использовать ли `xargs` аргументы, которые он получает каждый вместо каждых аргументов` -n`?
  • используйте find и grep, чтобы найти строки, содержащие некоторую строку и не содержащие другую строку из файлов
  • Удаление некоторых из самых больших файлов в каталоге
  • Измените код ASP на PHP-код во всех файлах
  • Скопируйте файлы с родительской папкой в ​​новый каталог
  • Как удалить все, кроме последних 10 файлов
  • Ускорение команды поиска rm с проверкой путем распараллеливания
  • Формат вывода xargs
  • Linux и Unix - лучшая ОС в мире.