合并多个目录中的多个文件 - bash

时间:2018-02-09 07:54:26

标签: linux bash shell unix

我们需要循环多个directiories,并且在每个目录中都会有多个文本文件,其中Pattern File“n”.txt需要合并为一个,File.txt

我们正在使用Bourne Shell脚本。

示例:

node

每个目录中的文件都可以使用循环 cat * .txt> all.txt命令。

但是我们如何循环直播?

3 个答案:

答案 0 :(得分:2)

从当前目录的所有直接子目录

中连接Fil*.txt
cat */Fil*.txt >Final.txt

要访问任意深度嵌套的子目录,有些shell会提供**作为扩展名,但这不是POSIX sh兼容的。

cat **/Fil*.txt >Final.txt

如果你真的想要遍历你的目录并为每个目录做一些更复杂的事情,那就是

for d in */; do
    : something with "$d"
done

或类似地,对于支持**的shell,您可以遍历目录中的所有目录;

for d in **/; do
    : something with "$d"
done

例如,: something with "$d"可以cat "$d"/Fil*.txt >"$d"/Final.txt在每个目录中创建Final.txt,其中只包含该目录中的Fil*.txt个文件。

答案 1 :(得分:0)

您可以尝试使用find命令

find /staging/dusk/inbound/ -name "*.txt" -type f -exec cat {} \;>>MergedFile.txt

答案 2 :(得分:0)

你可以采用ad-hok方式进行

find /staging/dusk/inbound -type f -name *.txt | sort -n | awk '{ print "cat " $1 " >> all.txt"}' > marge.sh
chmod +x marge.sh
sh merge.sh