我想复制五个文件的内容到一个文件。我试着对每个文件使用cp。但是这会覆盖从上一个文件复制的内容。我也试过

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

但这并没有奏效。

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

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

我该怎么做?


当前回答

所有的(文本)文件到一个

find . | xargs cat > outfile

Xargs生成find的输出行。猫的论点。

Find有很多选项,比如name '*.txt'或type。

如果您想在管道中使用它,您应该查看它们

其他回答

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

我找到这个页面是因为我需要将952个文件合并为一个。我发现如果你有很多文件,这个工作得更好。这将为您需要的任意数量的数字进行循环,并使用>>将每个数字附加到0.txt的末尾。

编辑:

正如评论中提到的:

cat {1..3}.txt >> 0.txt

or

cat {0..3}.txt >> all.txt

另一个选项是sed:

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

还是……

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

还是……

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

或者没有定向……

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

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

当然,您也可以使用通配符来缩短文件列表。例如,对于上面例子中有编号的文件,你可以这样用花括号指定范围:

sed -n w"merge.txt" {1..3}.txt

如果你想将3个文件的内容追加到一个文件中,那么下面的命令将是一个很好的选择:

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

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

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

猫* > .txt

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

如果您有一个特定的输出类型,那么执行如下操作

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