多线程xargs与cat的输入

时间:2012-02-20 04:13:42

标签: bash xargs

我的服务器上有一个文本文件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 个答案:

答案 0 :(得分:5)

您说每个是一个文件路径,但您使用-0 xargs选项,它将分隔符从换行符切换为空字符。来自man页面:

输入项由空字符而不是空格终止,引号和反斜杠不是特殊的(每个字符都是字面意思)....

请勿使用-0选项:

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

答案 1 :(得分:3)

我想你想要GNU Parallel

答案 2 :(得分:0)

--max-args是您需要的正确选项

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