大量文件串联

rav*_*avi 2 linux file concatenation cat

我的目录中有大约 3-4 百万个文件,文件名以type1.txt, type2.txt.(file are 1type1.txt, 1type2.txt,2type2.txt,2type2.txtetc )结尾

现在我想连接所有以 type1.txt 和 type2.txt 结尾的文件。

目前我正在cat *type1.txt > allTtype1.txttype2.txt. 我想保留两个最终输出文件中的顺序,我猜是cat这样做的。但速度太慢了。

请建议一些更快的方法来执行相同的操作。

谢谢,拉维

jfg*_*956 5

您可以使用以下命令来执行此操作:

ls | while read file; do cat $file >> allTtype${file#*type}; done
Run Code Online (Sandbox Code Playgroud)

但正如snap在他的回答中所说,每次cat需要打开一个文件时,它都必须进行inode查找,这在包含大量文件的目录中需要很长时间。为了加快速度,您可以使用Sleuth Kit中的icat按 inode 进行cat :

ls -i | while read -a file_array; do icat /dev/sda1 ${file_array[0]} >> allTtype${file_array[1]#*type}; done
Run Code Online (Sandbox Code Playgroud)

更好的是,您可以将生成的文件放在另一个目录中:

ls -i | while read -a file_array; do icat /dev/sda1 ${file_array[0]} >> /newdir/allTtype${file_array[1]#*type}; done
Run Code Online (Sandbox Code Playgroud)