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

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

但这并没有奏效。

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

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

我该怎么做?


当前回答

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

猫* > .txt

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

其他回答

另一个选择,对于那些像我一样偶然发现这篇文章的人来说,是使用find -exec:

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

在我的例子中,我需要一个更健壮的选项,可以查看多个子目录,所以我选择使用find。分解一下:

find .

查看当前工作目录。

-type f

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

-name '*.txt'

按名称缩减结果集

-exec cat {} +

对每个结果执行cat命令。"+"表示只生成一个cat实例(thx @gniourf_gniourf)

 >> output.file

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

另一个选项是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

发送多个文件到一个文件(text .txt):

cat *.txt > textall.txt

如果你所有的文件名称都类似,你可以简单地这样做:

cat *.log >> output.log

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

猫* > .txt

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