我的服务器上有一个文本文件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个文件。我已经尝试了其他一些方法,但我还没有像我想的那样工作。
有什么想法吗?
答案 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