Я хочу найти команду bash, которая позволит мне grep каждый файл в каталоге и записать вывод этого grep в отдельный файл. Мое предположение было бы сделать что-то вроде этого
ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"
но насколько я знаю, xargs не нравятся двойные кавычки. Однако, если я удаляю двойные кавычки, команда перенаправляет вывод всей команды в один файл с именем «{}». Вместо ряда отдельных файлов.
Кто-нибудь знает способ сделать это с помощью xargs? Я просто использовал этот сценарий grep в качестве примера, чтобы проиллюстрировать мою проблему с xargs, поэтому любые решения, которые не используют xargs, не подходят для меня.
xargs
без-0
: это применимо только тогда, когда вы выводите данныеfind
с помощью каналаxargs
, верно? когда я делаю,xargs -a <input_file>
как бы я использовал это? Большинство команд, например, сgrep
выходами\n
и без них\0.
. Единственный способ обойти это, я думаю, использоватьtr
снова, чтобы исправить это. Но почему важно использовать его только с-0
?-0
,xargs
возьмет ваши имена файлов и разбит все пробелы, кавычки и обратные слеши в них. Вы должны просто забыть оxargs
качестве инструмента. Если у вас есть строки, используйте цикл bash для итерации строк:while read line; do <command> "$REPLY"; done < file-with-lines
илиcommand | while ...
xargs
являются GNU),xargs
следует избегать, если с ним нельзя использовать-0
. Спасибо.xargs
, который не всегда включает в себя анализls
или использованиеsh -c
. Это не дает ни малейшего ответа на вопрос, но является первым результатом Google для вопроса, только добавляя путаницу.xargs -I{} sh -c 'grep ABC "$1" > "$1.out"' -- {}
? В частности, правила встроенных (двойных) кавычек и символ «-» в конце. СпасибоРешение без
xargs
заключается в следующем:... и то же самое можно сделать с
xargs
, получается:Изменить : одиночные кавычки добавлены после замечания от lhunath .
источник
Я предполагаю, что ваш пример - это просто пример, который вам может понадобиться> для других целей. GNU Parallel http://www.gnu.org/software/parallel/ может помочь вам. Он не нуждается в дополнительном цитировании, если ваши имена файлов не содержат \ n:
Если у вас есть имена файлов с \ n:
В качестве дополнительного бонуса вы получаете задания, выполняемые параллельно.
Посмотрите вступительные видео, чтобы узнать больше: http://pi.dk/1
10-секундная установка попытается выполнить полную установку; в случае неудачи - личная установка; если это не удается, минимальная установка:
Если вам нужно переместить его на сервер, на котором не установлен GNU Parallel, попробуйте
parallel --embed
.источник