Linux shellscript 无需 for 循环即可合并所有文件

Linux shellscript 无需 for 循环即可合并所有文件

我在一个目录中有数百个文件,是否有一个简单的命令或命令管道可以用来将它们附加在一起?我不想使用任何循环。

答案1

cat * >/path/to/somewhere

不要做

cat * > toall.txt

因为“toall.txt”是在 cat 启动之前创建的,所以您会得到奇怪的结果,将 toall.txt “cat” 成 toall.txt。

如果要在当前目录中进行 cat,你应该使用

cat [some_globbing] > file #or
cat * > .dotted_file

.dotted_file 不会通过*通配符进行扩展。

或者例如

(ls *.txt | xargs cat ) > /some/file

答案2

如果没有许多文件:

cat * > /some/new/file

否则:

find . -exec cat {} + > /some/new/file
find . -exec cat {} \; > /some/new/file

答案3

与Ignatiou的建议类似:

rm /the/output && find . -print0 | xargs -0 cat >> /the/output

如果不使用 xargs,您很容易超出最大命令行长度。如果不使用 -print0,您可能会遇到文件名称中包含奇怪字符(如空格)的问题。但这也是 GNU 特有的。

答案4

这会将所有文件附加到 outfile:

for file in !(outfile); do
        cat "$file" >> outfile
done    

如果存在,您需要先删除 outfile。但是,这不会捕获点文件。如果您还想捕获这些文件,可以使用以下两种模式

.??* !(outfile)

创建文件列表。它要求点文件的长度至少为 3,因此排除 . 和 ..!

相关内容