xargs и ввод команды ex

Может кто-нибудь объяснить, почему при попытке запустить командный сценарий ex для нескольких файлов это работает:

for x in `ls *`;do ex $x <excmds;done;

но это не так:

ls *|xargs -i ex {} <excmds

Первый будет выполнять ex и запускать команды в «excmds» для каждого файла. Второй, я не уверен, что он делает, но он не изменяет никаких файлов. Я предполагаю, что перенаправление является проблемой и не действует при каждом выполнении xargs? Есть ли способ сделать это с помощью xargs? (еще один вопрос, который я поднял на xargs - может быть, мне следует прекратить его использовать :()


person Joe Watkins    schedule 02.03.2011    source источник
comment
В этом случае xargs будет считывать ввод из excmds вместо вывода ls.   -  person Joachim Sauer    schedule 02.03.2011
comment
хм, хорошо, это немного очевидно, теперь я смотрю на это. Похоже, это должен быть ответ, а не комментарий, хотя мне все же хотелось бы знать, как это сделать с помощью xargs.   -  person Joe Watkins    schedule 02.03.2011
comment
Джо, я не ответил, потому что у меня не было реального ответа (только этот комментарий). Также кажется, что xargs не подходит для этой работы, так как вы хотите выполнить некоторую команду ровно один раз для каждого файла. xargs полезен для выполнения команд, которые могут обрабатывать несколько входных данных одновременно.   -  person Joachim Sauer    schedule 02.03.2011
comment
чтобы увидеть, что делает xargs, запустите его с опцией -t. Также я подозреваю, что ls * - правильный инструмент (попробуйте его в папке с подпапками!)   -  person Jakob Kroeker    schedule 13.06.2014
comment
@Jakob Спасибо, не знал о -t, а еще я перечитал ответ о GNU Parallel и заметил \ перед ‹. Может ответ? Но нет, несмотря на то, что он выглядит правильно: ls y*|xargs -i -t ex {} \<excmds ex ya <excmds он просто зависает! Предположим, вы имели в виду, что ls не является правильным инструментом   -  person Joe Watkins    schedule 16.07.2014


Ответы (1)


Используйте параллельный GNU:

ls * | parallel ex {} \<excmds

Чтобы узнать больше, посмотрите вступительный видеоролик: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Установка за 10 секунд:

wget pi.dk/3 -qO - | sh -x
person Ole Tange    schedule 08.03.2011