将目录中的所有* .txt文件合并到一个大文本文件中的最快捷,最实用的方法是什么?
目前我正在使用带有cygwin的windows,所以我可以访问BASH。
Windows shell命令也不错,但我怀疑它有一个。
答案 0 :(得分:453)
这会将输出附加到all.txt
cat *.txt >> all.txt
这会覆盖all.txt
cat *.txt > all.txt
答案 1 :(得分:125)
请记住,对于目前为止给出的所有解决方案,shell决定了文件连接的顺序。对于Bash,IIRC,这是按字母顺序排列的。如果顺序很重要,您应该正确命名文件(01file.txt,02file.txt等等),或者按照您想要连接的顺序指定每个文件。
$ cat file1 file2 file3 file4 file5 file6 > out.txt
答案 2 :(得分:33)
Windows shell命令type
可以执行此操作:
type *.txt >outputfile
类型type
命令还会将文件名写入stderr,>
重定向操作符不会捕获这些文件名(但会显示在控制台上)。
答案 3 :(得分:24)
您可以使用Windows shell copy
来连接文件。
C:\> copy *.txt outputfile
来自帮助:
要附加文件,请为目标指定单个文件,但为源指定多个文件(使用通配符或file1 + file2 + file3格式)。
答案 4 :(得分:4)
shell最实用的方法是cat命令。其他方式包括,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
答案 5 :(得分:4)
这种做法怎么样?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
答案 6 :(得分:4)
要小心,因为这些方法都不适用于大量文件。就个人而言,我使用了这一行:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
编辑:正如有人在评论中所说,您可以将$(ls | grep ".txt")
替换为$(ls *.txt)
$(ls | grep ".txt")
等亵渎神明的表达方式必须替换为*.txt
(请参阅文章here)。
良好的解决方案
for i in *.txt;do cat $i >> output.txt;done
答案 7 :(得分:3)
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
例如:
type C:\*.txt > C:\1\all.txt
这将获取C:\ Folder中的所有txt文件,并将其保存在C:\ 1文件夹中,名称为all.txt
或者
type [source folder]\* > [destination folder]\[file name].[File extension]
例如:
type C:\* > C:\1\all.txt
这将获取文件夹中存在的所有文件,并将内容放在C:\ 1 \ all.txt
中答案 8 :(得分:0)
您可以这样做:
cat [directory_path]/**/*.[h,m] > test.txt
如果您使用{}
包含要查找的文件的扩展名,则会出现排序问题。
答案 9 :(得分:0)
当您遇到将all.txt纳入all.txt的问题时, 您可以尝试检查all.txt是否存在,如果存在,请删除
赞:
[ -e $"all.txt" ] && rm $"all.txt"
答案 10 :(得分:0)
如果文件列表过长,最受好评的答案将失败。
更便携的解决方案将使用fd
fd -e txt -d 1 -X awk 1 > combined.txt
-d 1
将搜索限制为当前目录。如果省略此选项,则它将递归地找到当前目录中的所有.txt
文件。
-X
(也称为--exec-batch
)一次对所有搜索结果执行命令(在这种情况下为awk 1
)。
答案 11 :(得分:-4)
所有这些都令人讨厌......
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
简单的东西。