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

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

但这并没有奏效。

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

如。文件1.txt, 2.txt, 3.txt。把1,2,3的内容放在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内容附加到输出文件的末尾。

其他回答

您需要cat (concatenate的缩写)命令,并将shell重定向(>)导入到输出文件

cat 1.txt 2.txt 3.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内容附加到输出文件的末尾。

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

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

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

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

如果你的文件包含头文件,你想在输出文件中删除它们,你可以使用:

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