最快、最实用的方法是将目录中所有*.txt文件合并成一个大文本文件?
目前我正在使用带有Cygwin的Windows,因此我可以访问BASH。
Windows shell命令也不错,但我怀疑是否存在这样的命令。
这将把输出添加到all.txt文件中。
cat *.txt >> all.txt
这将覆盖all.txt文件。
cat *.txt > all.txt
请记住,对于迄今为止给出的所有解决方案,shell 决定了连接文件的顺序。对于 Bash,如果我没有记错的话,这是按字母顺序排序的。如果顺序很重要,您应该适当地命名文件(01file.txt、02file.txt 等),或指定您想要连接的每个文件的顺序。
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Windows中的shell命令type
可以实现这个功能:
type *.txt > outputfile.txt
type
命令还会将文件名写入stderr,这些内容无法被>
重定向操作符捕获(但会显示在控制台上)。
你可以使用 Windows 命令行的 copy
命令来连接文件。
C:\> copy *.txt outputfile
从帮助文件中得知:
若要将多个文件追加到一个目标文件中,指定目标文件为单个文件,源文件为多个文件(使用通配符或file1+file2+file3格式)。
请注意,这些方法都无法处理大量文件。个人而言,我使用了以下命令行:
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
for i in $(ls *.txt);do cat $i >> output.txt;done
呢? - streamofstarsls *.txt
不会失败吗? - Rafael Almeida这种方法怎么样?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
find
命令中添加 -maxdepth 1
。 - codeforestersort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
- steveHfind
的所有优点。我最喜欢的!当然,cat *.txt > all.txt
可以在同一个目录中完成工作(如上所述)。然而,对我来说,熟练地使用find
已经成为了一个非常好的习惯。今天它们都在一个文件夹中,明天它们可能会跨越嵌套的目录层次结构具有多个文件扩展名。不要过度复杂化,但也要与find
成为朋友。 :) - nJGL在IT技术中,最实用的命令之一是cat命令。其他方法包括:
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
方法将连接相邻文件的最后一行和第一行。 - mootmoottype [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
例如:
type C:\*.txt > C:\1\all.txt
这将获取C:\文件夹中的所有txt文件,并以all.txt的名称保存在C:\1文件夹中。
或者
type [source folder]\* > [destination folder]\[file name].[File extension]
type C:\* > C:\1\all.txt
cat [directory_path]/**/*.[h,m] > test.txt
如果你使用 {}
来包含你想要查找的文件扩展名,会出现顺序问题。
echo *.txt | xargs cat > all.txt
。该命令将使用通配符选择所有以“.txt”结尾的文件,并使用xargs命令将它们传递给cat命令,最终将它们合并到一个名为“all.txt”的文件中。 - 5heikki