合并目录并使用bash加入内部文件

时间:2013-08-06 13:50:15

标签: linux bash bash4

我有一堆遵循这种结构的目录:

\directories\
 |---\directory1\
 |      |---file1.txt
 |      |---file2.txt
 |
 |---\directory2\
 |      |---file1.txt
 |      |---file3.txt
 |
 |---\directory3\
 |      |---file4.txt
 |      |---file2.txt

我想合并目录和文件,所以最终会这样:

\directories\
 |---\directory1\
 |      |---file1.txt
 |      |---file2.txt
 |
 |---\directory2\
 |      |---file1.txt
 |      |---file3.txt
 |
 |---\directory3\
 |      |---file4.txt
 |      |---file2.txt
 |
 |---\mergeddata\
 |      |---file1.txt (from dir1 and dir2)
 |      |---file2.txt (from dir1 and dir4)
 |      |---file3.txt (from dir2)
 |      |---file4.txt (from dir3)

我对bash感到非常糟糕,并且已经尝试了很多东西,但是......没有得到任何好结果。

期待一些帮助!

1 个答案:

答案 0 :(得分:3)

您没有说明您希望如何合并文件或以何种顺序合并文件。我会猜测“连接,目录1出现在diretory2之前,目录2出现在目录3之前”?

以下脚本显示了一种直接的方法,而不依赖于花哨的替换:

cd directories
mkdir mergeddata
for I in directory1 directory2 directory3 ; do   # replace with your actual directory list
    for F in "$I"/* ; do
        B=$(basename "$F")
        cat "$F" >> "mergeddata/$B"
    done
done

编辑:我添加了一些引号,以防您的任何文件名最终出现空格字符或其他不方便的空格。