将特定文件连接成一个文件

将特定文件连接成一个文件

在包含 X 个文件的文件夹中,我需要将 Y 个文件(其中 X > Y)连接到一个文本文件中。我有需要连接的(Y 个文件的)文件名。

答案1

您可以使用该cat命令(请参阅 参考资料man cat获取更多信息)来连接文本文件。

如果你想创建一个新文件

cat [FILE1] [FILE2]... > new_file

或者如果您想附加到现有文件,请像这样使用它

cat [FILE1] [FILE2]... >> file 

答案2

如果文件中列出了 Y 个文件名,则 和list的简单组合就足够了:xargscat

xargs cat <list >>concatenation_of_files

如果您很小心并且每行列出一个文件(以避免文件名中出现空格问题),那么只需添加一个-d分隔符选项:

xargs -d'\n' cat <list >>concatenation_of_files

(这假设concatenation_of_files最初不存在或为空)。

答案3

答案是使用 bash。

假设您想要连接目录中的 json 文件:

cat *json > all.json

包括子目录:

shopt -s globstar
cat **/*json > all.json

但是,如果您有数千到数百万个文件,您将遇到:

bash: /bin/cat: Argument list too long

在这种情况下,执行以下操作也会输出正在处理的当前文件:

shopt -s globstar
rm concat.json
find . -path "**/*.json" | while read -r file; do
    echo -ne "\\r$file"
    cat "$file" >> concat.json
done

发布在这个问题上,如这个其他问题已结束

答案4

(我知道这真的很晚了,实际上不是一个答案,而是一个建议,如果你正在这样做的话。)

不要使用与要连接的文件相同的文件扩展名。

cat *.json > all.json.txt

然后回来...

mv all.json.txt all.json

实际上不确定这是否解决了问题中的问题,但这将避免循环问题。

相关内容