Я нашел решение (один из возможных), он использует openssl:
$ openssl zlib -d < /tmp/data
или
$ openssl zlib -d -in /tmp/data
*ПРИМЕЧАНИЕ: функциональность zlib по-видимому доступна в недавних openssl версиях> =1.0.0 (OpenSSL должен быть настроен/создан с zlib или zlib-динамической опцией, последний является значением по умолчанию),
Ответ Michael является правильным, и должен разобраться в Вашей проблеме. Выполнение
cat file | xargs -I % curl http://example.com/persons/%.tar
загрузит файлы bob.tar
john.tar.
sue.tar
как ожидалось.
скорее использование:
<file xargs -I % curl http://example.com/persons/%.tar
Я думаю, что Вы спрашиваете, как вставить отдельные строки, от которых вытягивают xargs
'stdin посреди команды, вместо того, чтобы просто вставлять его на конце всегда. Если так, -I
флаг берет a replacement-string
аргумент; xargs
затем заменит replacement-string
в команде со строкой, считанной из stdin:
$ cat file | xargs -I foobar curl http://example.com/foobar.tar
curl http://example.com/foobar.tar > foobar.tar
? Спасибо Gilles
– Josh K
29.10.2010, 06:02
>
оболочка конструкции и не будет работать на xargs
. С другой стороны, curl -o
запишет в именованный файл вместо stdout, как какой wget
делает, таким образом, это, вероятно, что требуется использовать здесь.
– ephemient
01.11.2010, 09:23
$ man xargs ... --arg-file=file -a file Read items from file instead of standard input. If you use this option, stdin remains unchanged when commands are run. Other- wise, stdin is redirected from /dev/null. ...
Можно хотеть установить --delimiter=
/-d
кому: '\n'
также.
С другой стороны, если Вы просто пытаетесь повернуть каждую строку в файле в URL,
$ sed -e 's#.*#http://example.com/persons/&.tar#' file
сделает, и если Вы хотите выбрать всех их, просто передать это по каналу в | wget -i
.
иначе с цикличным выполнением оболочки:
for i in `cat file`; do curl -I http://foo.com/$i; done
можно также выполнить каждое повторение в фоновом режиме путем добавления &
до последней точки с запятой - для очень больших загрузок это могло бы быть удобно
while IFS= read i ; do curl ... ; done < file
– Sorpigal
14.07.2015, 23:28
С Параллелью GNU можно сделать:
cat urls | parallel curl {} ">" {/}
Или:
cat persons | parallel curl http://example.com/persons/{}.tar ">" {}.tar
Посмотрите вводное видео для Параллели GNU для узнавания больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ
Это - более общая версия ответа Stefan:s, но я использую awk в середине для подготовки точной "строки", которую я хотел бы, чтобы xargs выполнил. И затем xargs использует удар, чтобы сделать фактическую "работу".
Это - немного излишества для этого примера, но это - общее решение, которое с некоторыми модификациями может решить много проблем...
cat file | awk '{print "curl http://example.com/persons/"$1".tar"}' | xargs -0 bash -c
while read VAR; do ... done
цикл прост все же очень универсальный:
while read word; do wget http://example.com/persons/$word; done < file
В конце концов, вы также можете использовать:
xargs -n1 -a file -I % curl http://example.com/persons/%.tar
cat xaa xab xac xad ... xargs ...
– Josh K 29.10.2010, 13:33cat
прекрасен действительно, точно так же, как для добавления большего количества информации... :) – Stefan 29.10.2010, 15:25xargs -I % curl …
(xargs опция преждеcurl
и его опции/аргументы). По крайней мереxargs curl -I %
(где-I %
предназначен как опция к xargs, не завихрение) не является портативным. – Chris Johnsen 05.12.2010, 20:04