[英]concat a lot of files to stdout
我的目录中有大量文件-约100k。 我想将它们组合并通过管道传输到标准输出(我需要将它们作为一个文件上传到其他位置),但是cat $(ls)
抱怨-bash: /bin/cat: Argument list too long
。 我知道如何将所有这些文件合并为一个临时文件,但是我可以避免吗?
find . -type f -print0 |xargs -0 cat
xargs
将多次调用cat
,每次调用的参数都尽可能多地适合命令行(args的总长度不能超过getconf ARG_MAX
)。
-print0
(配有独立的文件\\0
的) find
结合-0
(含分离过程的文件\\0
的) xargs
仅仅是一个好习惯,遵循它会阻止从打破的文件名与他们特殊的或白色字符的命令。
首先, cat $(ls)
不是解决此问题的正确方法cat *
会更合适。 如果文件数太多,则可以使用如下所示的find
:
find -exec cat {} +
这将组合find
结果并将其作为参数传递给cat
,并根据需要执行多个单独的实例。 它的行为与xargs
大致相同,但是不需要单独的过程或使用-print0
类的任何非标准功能,仅某些版本的find
支持。
find
在默认情况下是递归的,因此如果您的版本支持,则可以指定-maxdepth 1
来防止这种情况。 如果目录中还有其他内容,您也可以按-type
过滤(但根据您的原始尝试,我想没有)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.