将目录中所有*.txt文件合并为一个大文本文件的最快和最实用的方法是什么?
目前我正在使用cygwin的窗口,所以我可以访问BASH。
Windows shell命令也会很好,但我怀疑有没有一个。
将目录中所有*.txt文件合并为一个大文本文件的最快和最实用的方法是什么?
目前我正在使用cygwin的窗口,所以我可以访问BASH。
Windows shell命令也会很好,但我怀疑有没有一个。
当前回答
使用shell最实用的方法是cat命令。其他方式包括,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
其他回答
使用shell最实用的方法是cat命令。其他方式包括,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
Windows shell命令类型可以这样做:
type *.txt > outputfile.txt
Type Type命令还将文件名写入stderr,这些文件名不会被>重定向操作符捕获(但会显示在控制台上)。
要小心,因为这些方法都不能处理大量文件。就我个人而言,我用了这句话:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
编辑:就像有人在评论中说的,你可以用$(ls *.txt)替换$(ls | grep ".txt")
编辑:感谢@gnourf_gnourf的专业知识,使用glob是在目录中迭代文件的正确方法。因此,像$(ls | grep ".txt")这样亵渎神灵的表达式必须被*.txt取代(请参阅此处的文章)。
好的解决方案
for i in *.txt;do cat $i >> output.txt;done
如果文件列表太长,点赞最多的答案将失败。
更可移植的解决方案是使用fd
fd -e txt -d 1 -X awk 1 > combined.txt
-d 1将搜索限制在当前目录。如果省略此选项,则它将递归地查找当前目录中的所有.txt文件。 -X(也称为——exec-batch)一次性为所有搜索结果执行命令(在本例中为awk 1)。
注意,fd不是一个“标准的”Unix程序,所以您可能需要安装它
所有这些都令人讨厌....
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
简单的东西。