繁体   English   中英

将很多文件连接到stdout

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM