ディレクトリを既存のディレクトリに移動するには?

ディレクトリを既存のディレクトリに移動するには?

デフォルトでは、2つのツリーの変更をマージして、ブランチ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/mediacd/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

関連情報