Команда «Кот и труба для запуска» не примет двух аргументов

Я использовал эту команду:

cat urls.txt | xargs -n 1 -P 10 wget -q

для загрузки текстовых файлов URL. Это работало нормально, когда мой файл URL был похож на:

http://domain1.com/page.html
http://domain2.com/page.html
http://domain3.com/page.html

Однако теперь мне нужно загрузить текстовые файлы URL и опубликовать данные, например:

--post-data '1=1' http://domain1.com/page.html
--post-data '1=1' http://domain2.com/page.html
--post-data '1=1' http://domain3.com/page.html

При использовании вышеупомянутой команды cat он пытается загрузить URL, а затем опубликовать данные в виде URL. например в приведенном выше примере он скачал бы http://domain1.com/page.html , а затем попытался скачать --post-data 1 = 1, затем http://domain2.com /page.html и т. д.

Есть ли способ заставить cat отправлять только каждую строку файлов URL-адресов?

Обновление : я обнаружил это, добавив экранирование в пространство, например:

--post-data '1=1'\ http://domain1.com/page.html

заставляет его обрабатываться как один URL, но - кажется, что он исключен из аргумента --post-data.

3
задан 23 January 2014 в 04:04

3 ответа

Чтобы заставить xargs запускать команду один раз для каждой строки ввода, задайте для нее опцию -L 1 (и удалите опцию -n 1, поскольку они являются взаимоисключающими). Документ по стандартам для xargs гласит:

-L number
The utility shall be executed for each non-empty number lines of arguments
from standard input. A line is considered to end with the first <newline>
unless the last character of the line is a <blank>; a trailing <blank>
signals continuation to the next non-empty line, inclusive.
0
ответ дан 23 January 2014 в 04:04

Открыть терминал и запустить:

cat urls.txt | sed "s/[\"\<\>' \t\(\);]/\n/g" | grep "http://" | sort -u | xargs -n 1 -P 10 wget -q
0
ответ дан 23 January 2014 в 04:04

Вам не нужно xargs, можно сделать это с простым циклом удара Любое содержание URL как простой список и добавить опции непосредственно к wget:

while IFS= read -r url; do wget --post-data '1=1' "$url"; done < urls.txt

или включайте их в файл и передайте их wget:

while IFS= read -r url; do wget "$url"; done < urls.txt
0
ответ дан 23 January 2014 в 04:04

Другие вопросы по тегам:

Похожие вопросы: