如何将目录移动到现有目录上?

如何将目录移动到现有目录上?

我基本上需要合并两棵树上的更改,将更改从分支 2 应用到分支 1。我有这样的树:

media
├── cd
│   ├── 0
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   ├── 1
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── 2
│       ├── file1
│       ├── file2
│       └── file3
├── dvd
│   ├── 0
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   ├── 1
│   │   ├── file1
│   │   ├── file2
│   │   └── file3
│   └── 2
│       ├── file1
│       ├── file2
│       └── file3
└── stuff
    ├── 0
    │   ├── file1
    │   ├── file2
    │   └── file3
    ├── 1
    │   ├── file1
    │   ├── file2
    │   └── file3
    └── 2
        ├── file1
        ├── file2
        └── file3

我已经更改了分支 2 中的文件,并且需要将它们应用到分支 1。如果我只是尝试将它们移到分支 1 上,则会收到以下错误:

mv: cannot move `/branch2/media/cd' to `/branch1/media/cd': Directory not empty.

我还应该使用另一个命令吗?mv -f似乎没有做到这一点。

答案1

为什么不使用rsync替代呢?

rsync -a /branch2/media/ /branch1/media/

之所以mv不能搬去/branch2/media/cd//branch1/media是因为里面 /branch1/media已经有一个了。拒绝破坏非空目录。cd/mv

答案2

您通常更喜欢使用rsync或任何其他版本控制工具。

如果你仍然想破解,你可以先删除 /branch1/media/ 中的现有文件find

find /branch1/media -type d -exec rm -rf {} \+

然后你继续你的动作

for i in $(find /branch2/media -type d); do
    mv /branch2/media/$dir /branch1/media
done

您可能应该根据您的环境稍微调整这些命令,但没有理由它不起作用。

PS 打电话要小心find -exec rm -rf。我通常在ls使用之前首先检查我的 find 命令rm

相关内容