Многопоточность XARGS с вводом от кота - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть текстовый файл files.txt на моем сервере, в каждой строке находится файл с полным путем, например, /home/lelouch/dir/randomfile.txt.

. Я хочу перебрать файл files.txt и передать каждое имя файлак другому сценарию.

Я получил это, чтобы работать так:

cat /home/lelouch/dir/files.txt | xargs -0 -n 1 -P 30 /home/lelouch/bin/script.

Проблема в том, что, хотя я хочу обрабатывать его 30 файлов за раз, это происходит только 1 ввремя.Я пробовал несколько других способов, но я не заставил его работать так, как я хочу.

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 28 июня 2013

Вы говорите, что каждая строка является путем к файлу, но вы используете параметр -0 xargs, который переключает разделитель с новой строки на нулевой символ.Со страницы man:

Элементы ввода завершаются нулевым символом, а не пробелом, а кавычки и обратный слеш не являются специальными (каждый символ воспринимается буквально) ....

Не используйте -0 параметр:

cat /home/lelouch/dir/files.txt | xargs -P 30 -n 1 /home/lelouch/bin/script
3 голосов
/ 20 февраля 2012

Я думаю, что вы хотите GNU Parallel .

0 голосов
/ 20 февраля 2012

--max-args - правильный вариант, который вам нужен

cat /home/lelouch/dir/files.txt | xargs --max-args=30 /home/lelouch/bin/script
...