Использование xargs с вводом из файла

Скажем, у меня есть файл со следующими

bob john sue 

Теперь они непосредственно влияют на шаблон URL (в данном случае), например http://example.com/persons/bob.tar , john.tar , sue.tar .

Я хотел бы взять эти строки и запустить их через xargs . Однако я не знаю, что передается исполняемой команде. Как мне получить доступ к параметру из приглашения (например, я хочу просто эхо каждой строки, такой как cat file | xargs echo $PARAM ) или из сценария bash.

7 Solutions collect form web for “Использование xargs с вводом из файла”

Ответ Майкла прав, и вы должны решить свою проблему. Бег

 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 

Я думаю, вы спрашиваете, как вставить отдельные строки, вытащенные из stdin xargs , в середине команды, а не просто вставлять их в конец всегда. Если это так, флаг -I принимает аргумент с replacement-string ; xargs затем заменит replacement-string в команде строкой, считанной с stdin:

 $ cat file | xargs -I foobar curl http://example.com/foobar.tar 
 $ man xargs
 ...
        --arg-файл = файл
        -файл
               Чтение элементов из файла вместо стандартного ввода.  Если вы используете это
               option, stdin остается неизменным при запуске команд.  Другие-
               мудрый, stdin перенаправляется из / dev / null.
 ...

Возможно, вы захотите установить --delimiter= / -d в '\n' .


С другой стороны, если вы просто пытаетесь превратить каждую строку в файл в URL-адрес,

 $ sed -e #. * # http: //example.com/persons/&.tar# 'файл

сделают, и если вы хотите получить все из них, просто подключите это к | wget -i | wget -i .

другой способ с чередованием оболочки:

 for i in `cat file`; do curl -I http://foo.com/$i; done 

вы также можете запускать каждую итерацию в фоновом режиме, добавляя & до последней точки с запятой – для очень больших загрузок это может быть удобно

С помощью GNU Parallel вы можете:

 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 использует bash для выполнения фактической «работы».

Для этого примера это немного перебор, но это общее решение, которое с некоторыми изменениями может решить многие проблемы …

 cat file | awk '{print "curl http://example.com/persons/"$1".tar"}' | xargs -0 bash -c 

while read VAR; do ... done while read VAR; do ... done loop прост, но очень универсален:

 while read word; do wget http://example.com/persons/$word; done < file 
  • Unix: вопрос о xargs
  • xargs не может обрабатывать пробелы в строках
  • Как удалить файлы, отфильтрованные awk
  • Найдите файлы с определенным форматом файлов, коту, каждый с файлом заголовка, и сохраните результат в исходный файл для каждого такого файла
  • xargs на OSX: незаконный вариант -
  • Как использовать определенную функцию с xargs
  • Как создать несколько файлов tar с помощью сценария bash и использовать дату в качестве имен файлов?
  • xargs - добавить каждый аргумент с параметром
  • как суммировать вывод awk или другого выражения с помощью xargs
  • правильное параллельное использование xargs
  • Безопасный поиск и удаление файлов
  • Interesting Posts

    Откат обновлений микрокода Intel и скорости компьютера

    Настройка учетной записи linux

    Разработка ksar (sar grapher) прекратилась до 2013 года – нет совместимости с RHEL 7x – любая альтернатива?

    Что вызывает `diff` для запуска` git diff`?

    ln дает разные результаты при многократном запуске

    Уведомлять пользователя о блокировке учетной записи при входе в систему (Solaris)

    Почему sudo не перенаправляет stdout в файл / etc / file, но sudo 'nano' или 'cp' могут?

    Использовать вывод из awk в качестве входа для mv

    inotifywait – получить старое и новое имя файла при переименовании

    nmap не отображает список открытых портов

    Невозможно выполнить загрузку при замене карты Adaptec SCSI

    Найти WiFi MCS Index в Linux

    Путаница в отношении связывания библиотеки boost во время компиляции

    Установленный Linux Mint в системе с двойной загрузкой. Не удается загрузить Windows 7

    Как создать скрипт для отправки электронной почты по telnet?

    Linux и Unix - лучшая ОС в мире.