如何将多个文件的内容附加到一个文件中

我想将五个文件的内容按原样复制到一个文件中。 我试图使用cp为每个文件。 但是,这会覆盖从前一个文件复制的内容。 我也试过了

paste -d "\n" 1.txt 0.txt 

并没有工作。

我想我的脚本在每个文本文件的末尾添加换行符。

例如。 文件1.txt,2.txt,3.txt。 把内容1,2,3放在0.txt中

我该怎么做 ?

你需要cat (concatenate的简写)命令,把shellredirect( > )到你的输出文件中

 cat 1.txt 2.txt 3.txt > 0.txt 

另一个select,对于那些仍然偶然发现这个post的人,就是使用find -exec

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

在我的情况下,我需要一个更强大的选项,通过多个子目录,所以我select使用find 。 打破它:

 find . 

查看当前的工作目录。

 -type f 

只对文件感兴趣,而不是目录等

 -name '*.txt' 

减less按名称排列的结果

 -exec cat {} + 

对每个结果执行cat命令。 “+”意味着只生成1个cat实例(thx @gniourf_gniourf)

  >> output.file 

正如在其他答案中所解释的那样,将追加的内容追加到输出文件的末尾。

如果你有一个特定的输出types,然后做这样的事情

 cat /path/to/files/*.txt >> finalout.txt 

如果你所有的文件都在单个目录中,你可以简单地做

cat * > 0.txt

文件1.txt,2.txt,..将进入0.txt

 for i in {1..3}; do cat "$i.txt" >> 0.txt; done 

我find了这个页面,因为我需要将952个文件合并成一个文件。 如果你有很多文件,我发现这个工作要好得多。 这将为你所需要的许多数字做一个循环,并且使用>>将每个数字追加到0.txt的末尾。

另一个选项是sed

 sed r 1.txt 2.txt 3.txt > merge.txt 

要么…

 sed h 1.txt 2.txt 3.txt > merge.txt 

要么…

 sed -np 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here 

或者没有redirect

 sed wmerge.txt 1.txt 2.txt 3.txt 

请注意,最后一行也写入merge.txt (而不是wmerge.txt !)。 您可以使用w"merge.txt"以避免与文件名混淆,对于无提示输出可以使用-n

当然,你也可以用通配符缩短文件列表。 例如,如果像上面的例子那样编号的文件,你可以用这种方式来指定带花括号的范围:

 sed -nw"merge.txt" {1..3}.txt 

如果原始文件包含不可打印的字符,则在使用cat命令时会丢失。 使用“cat -v”,非printables将被转换为可见的string,但输出文件仍然不包含原始文件中的实际非printables字符。 对于less量文件,另一种方法是在处理非打印字符的编辑器(例如vim)中打开第一个文件。 然后操作到文件底部并input“:r second_file_name”。 这将拉第二个文件,包括非打印字符。 对于其他文件也可以做同样的事情。 当所有文件都被读入时,input“:w”。 最终的结果是,第一个文件现在将包含它原来的内容,以及读入文件的内容。

如果您的文件包含标题,并且希望在输出文件中将其删除,则可以使用:

 for f in `ls *.txt`; do sed '2,$!d' $f >> 0.out; done 

如果所有文件的命名都是相似的,你可以简单地做:

 cat *.log >> output.log 

如果要将3个文件的内容附加到一个文件中,那么以下命令将是一个不错的select:

 cat file1 file2 file3 | tee -a file4 > /dev/null 

它会将所有文件的内容合并到file4中,并将控制台输出到/dev/null