合并 100 多个文件夹中的同名文件

Merge files with same name in more than 100 folders

我有一个类似于 的问题,我有大约 100 个不同的文件夹,其中有一个 .txt 文件“replaced_txt”,问题是我需要合并这些文件但是因为有 100 个不同的文件夹,我想知道这样做是否比做更快:

cat /folder1/replaced_txt /folder2/replaced_txt /folder3/replaced_txt ...

cat 命令几乎是最简单的命令,因此没有明显且可移植的方法可以更快地复制文件内容。无论如何,瓶颈可能是找到文件,而不是复制它们。如果确实文件都在根目录下的子目录中,

cat /*/replaced_txt >merged_txt

将按字母顺序扩展通配符(因此 /folder10/replaced_txt/folder2/replaced_txt 之前)但可能 运行 进入“参数列表太长” and/or 需要很长时间才能扩展如果其中一些目录很大(特别是在具有 ext3 文件系统的旧 Linux 系统上,它不能很好地扩展到大目录),则使用通配符。更通用的解决方案是 find,它更擅长在任意嵌套的子目录中查找文件,并且不会 运行 进入“参数列表太长”,因为它从不尝试 assemble 所有文件名按字母顺序排列;相反,它只是枚举它在遍历目录时找到的文件,无论文件系统报告它们的顺序如何,并在参数列表填满到系统的 ARG_MAX 限制时创建一个新的 cat 进程被超越了。

find / -type f -name replaced_txt -xdev -exec cat {} + >merged_txt

如果您想限制遍历子目录的距离或只想访问某些目录,请查看 find 手册页以了解其他选项。