我正在寻找一种方法来合并两个嵌套目录的内容,如果它们的名称匹配。新的组合文件夹需要放在新目录中。如果目录2中没有与目录1中文件夹名称匹配的文件夹,则仍必须将目录1中的文件夹复制到新的主目录中。
例如,假设我有一个目录结构如下:
* dir1
* foo
* file1
* bar
* file2
* extra
* file3
* dir2
* foo
* file4
* bar
* file5
我希望输出为:
* newdir
* foo
* file1
* file4
* bar
* file2
* file5
* extra
* file3
提前感谢您的帮助!
答案 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