【发布时间】:2011-12-06 23:41:34
【问题描述】:
我有一个充满子目录的目录,每个子目录中都有一些文本文件(即深度为 1)。
我想将所有这些文件(不分先后)合并到一个文件中:
cat file1 file2.... fileN >new.txt
是否有一个 bash shell 单行程序可以列出这些目录中的所有文件并将它们传递给 cat?
【问题讨论】:
我有一个充满子目录的目录,每个子目录中都有一些文本文件(即深度为 1)。
我想将所有这些文件(不分先后)合并到一个文件中:
cat file1 file2.... fileN >new.txt
是否有一个 bash shell 单行程序可以列出这些目录中的所有文件并将它们传递给 cat?
【问题讨论】:
这个怎么样?
find . -name '*.txt' -exec cat {} \; > concatenated.txt
当然它会多次调用 cat 而不是一次,但效果是一样的。
【讨论】:
-exec cat {} +。这只会使用所有参数调用cat 一次——就像xargs 一样。不过,我更喜欢xargs,因为它非常灵活。
find . -type f -print0 | xargs -0 cat
find 将递归搜索文件 (-type f) 并将其名称打印为以空字符结尾的字符串 (-print0)。
xargs 将从标准输入读取以空字符结尾的字符串 (-0) 并将它们作为参数传递给 cat
【讨论】:
find 都支持-exec command {} +