将大量文件合并为一个

时间:2014-01-18 19:48:19

标签: macos bash unix cat

我有大约30个K文件。我想将它们合并为一个。我使用了CAT但是我收到了这个错误。

cat *.n3 > merged.n3

-bash: /usr/bin/xargs: Argument list too long

如何增加使用“cat”命令的限制?如果有任何迭代方法来合并大量文件,请帮助我。

3 个答案:

答案 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}}“文件附加在自身内。