我有大约30个K文件。我想将它们合并为一个。我使用了CAT但是我收到了这个错误。
cat *.n3 > merged.n3
-bash: /usr/bin/xargs: Argument list too long
如何增加使用“cat”命令的限制?如果有任何迭代方法来合并大量文件,请帮助我。
答案 0 :(得分:12)
这是一种安全的方法,无需find
:
printf '%s\0' *.n3 | xargs -0 cat > merged.txt
(我还选择merged.txt
作为输出文件,正如@MichaelDautermann健全建议;之后重命名为merged.n3
。
注意:其工作原理如下:
printf
是一个bash shell builtin ,其命令行不受传递给外部可执行文件的命令行的长度限制。xargs
很聪明地将输入参数(通过管道传递,因此也不受命令行长度限制)分区为多个调用,以避免长度限制;换句话说:xargs
尽可能少地打电话而不会遇到限制。\0
作为与xargs'-0
选项配对的分隔符可确保所有文件名 - 即使是那些包含嵌入空格甚至换行符的文件名 - 都按原样传递。答案 1 :(得分:4)
传统方式
> merged.n3
for file in *.n3
do
cat "$file" >> merged.n3
done
答案 2 :(得分:3)
尝试使用“find
”:
find . -name \*.n3 -exec cat {} > merged.txt \;
此“查找”目录中具有“n3
”扩展名的所有文件,然后将每个结果传递给“cat
”命令。
我将输出文件名设置为“merged.txt
”,您可以在完成追加后将其重命名为“merged.n3
”,因为您可能不希望新的“{merged.n3
” 1}}“文件附加在自身内。