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

标签 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 出现在目录 2 之前,目录 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

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

关于linux - 使用 bash 合并目录和加入内部文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18082105/

相关文章:

linux - 在 BASH 中,如何从使用 HTML <textarea></textarea> 编写的文件中存在的变量替换\r

c - 从 TCP 数据包负载中获取主机字段

linux - 打印一行,其中一个数字在第三个字段中重复了 n 次

Linux 驱动程序和 Sysfs

linux - 在 Linux 中打印特定文本行的单个部分

linux - 将逗号分隔的数字模式匹配为字符串

文件中的linux内核输出

bash - 添加带有变量的 YUM 存储库

python - 使用线程模块时,Django 在完成测试后不退出

linux - namerefs 和管道进入 bash