按名称合并嵌套目录

时间:2015-12-03 23:29:53

标签: bash shell merge scripting directory

我正在寻找一种方法来合并两个嵌套目录的内容,如果它们的名称匹配。新的组合文件夹需要放在新目录中。如果目录2中没有与目录1中文件夹名称匹配的文件夹,则仍必须将目录1中的文件夹复制到新的主目录中。

例如,假设我有一个目录结构如下:

* dir1

  * foo

     * file1

  * bar

     * file2

  * extra

     * file3

* dir2

  * foo

     * file4

  * bar

     * file5

我希望输出为:

* newdir

  * foo

     * file1

     * file4

  * bar

     * file2

     * file5

  * extra

     * file3

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

有两种方法。 ditto适用于OS X,可以用较少的命令完成工作。 cp -a可以在任何bash shell中使用。

这是我的测试文件夹,以您的示例为蓝本。

.
├── dir1
│   ├── bar
│   │   └── file2
│   ├── extra
│   │   └── file3
│   └── foo
│       └── file1
└── dir2
    ├── bar
    │   └── file5
    └── foo
        └── file4

然后,运行以下某个选项(取决于您的平台):

OSX:

$ ditto dir1/ dir2/ newdir/

LINUX:

$ cp -a dir1/ newdir/
$ cp -a dir2/ newdir/

结果目录:

.
├── dir1
│   ├── bar
│   │   └── file2
│   ├── extra
│   │   └── file3
│   └── foo
│       └── file1
├── dir2
│   ├── bar
│   │   └── file5
│   └── foo
│       └── file4
└── newdir
    ├── bar
    │   ├── file2
    │   └── file5
    ├── extra
    │   └── file3
    └── foo
        ├── file1
        └── file4

来源(同上): https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ditto.1.html