在Bash中将多个文本文件连接成单个文件

什么是最快最实用的方法,将目录中的所有* .txt文件合并为一个大文本文件?

目前我使用cygwin的窗口,所以我有权访问BASH。

Windows的shell命令也不错,但我怀疑有一个。

这将输出附加到all.txt

cat *.txt >> all.txt 

这将覆盖all.txt

 cat *.txt > all.txt 

请记住,对于迄今为止给出的所有解决scheme,shell决定文件连接的顺序。 对于Bash,IIRC,这是字母顺序。 如果顺序很重要,您应该适当地命名这些文件(01file.txt,02file.txt等等),或者按照您想要连接的顺序指定每个文件。

 $ cat file1 file2 file3 file4 file5 file6 > out.txt 

Windowsshell命令type可以这样做:

 type *.txt >outputfile 

Type type命令还会将文件名写入stderr,这不会被>redirect操作符捕获(但会显示在控制台上)。

您可以使用Windowsshell程序copy来连接文件。

 C:\> copy *.txt outputfile 

从帮助:

要追加文件,请为目标指定一个文件,但为源指定多个文件(使用通配符或file1 + file2 + file3格式)。

用shell最实用的方法就是cat命令。 其他方式包括,

 awk '1' *.txt > all.txt perl -ne 'print;' *.txt > all.txt 
 type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension] 

例如:

 type C:\*.txt > C:\1\all.txt 

这将采取C:\文件夹中的所有txt文件,并保存在C:\ 1文件夹的名称all.txt

要么

 type [source folder]\* > [destination folder]\[file name].[File extension] 

例如:

 type C:\* > C:\1\all.txt 

这将采取该文件夹中存在的所有文件,并把那里的内容在C:\ 1 \ all.txt

这个方法怎么样?

 find . -type f -name '*.txt' -exec cat {} + >> output.txt 

所有这些都是令人讨厌的

 ls | grep *.txt | while read file; do cat $file >> ./output.txt; done; 

容易的东西。