将大量文件合并为一个



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

cat *.n3 > merged.n3
-bash: /usr/bin/xargs: Argument list too long

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

这是一种安全的方法,而无需find

 printf '%s' *.n3 | xargs -0 cat > merged.txt

(我还选择merged.txt作为输出文件,因为@michaeldautermann强烈建议;后来重命名为merged.n3)。

注意:此工作的原因是:

  • printf是一个bash shell 内置,其命令行不受传递给 external 可执行文件的命令行的长度限制。
  • xargs对于分区输入参数(通过 pipe通过,因此也不受命令行长度限制)很聪明,以避免长度限制;换句话说:xargs在不陷入极限的情况下进行了尽可能少的呼叫。
  • 使用作为与XARGS的-0选项配对的定界符,可确保所有文件名 - 甚至具有嵌入式空间甚至Newlines的文件名都通过AS -IS传递。

传统方式

> merged.n3
for file in *.n3
do
  cat "$file" >> merged.n3
done

尝试使用" find":

 find . -name *.n3 -exec cat {} > merged.txt ;

此"查找"所有文件,并在您的目录中使用" n3"扩展名,然后将每个结果传递到" cat"命令。

,我将输出文件名设置为" merged.txt",在附加完成后,您可以将其重命名为" merged.n3",因为您可能不希望您的新" merged.n3"文件附加自身。

相关内容

  • 没有找到相关文章