すべてのファイルとフォルダ(サブディレクトリとそのファイルを含む)を別のフォルダとそのサブフォルダに移動して上書きしたいと思います。
次のコマンドを試しましたが、サブディレクトリとそのファイルでは機能しません。
mv -f fromA/* toB/
mv -f fromA/{,.}* toB/
したがって、フォルダAのすべてのファイルはフォルダBに移動されますが、A / subからB / subに移動されるわけではありません。
「fromA/subA」を「toB/subB」に移動できません。ファイルが存在します。エラーが発生します。
各フォルダを1つずつ見てみるとうまくいきますが、何か欠けていることは確かです。関連する答えはすべてではありませんが、ほとんどを見ましたが、どちらも機能しません。
答え1
info mv
これがある:
_Note_: 'mv' will only replace empty directories in the destination.
Conflicting populated directories are skipped with a diagnostic.
これを裏返す方法はないようです。 Bを削除し、Aの名前をBに変更するか、まずBのディレクトリを手動で消去または削除します。
答え2
使用することをお勧めしますrsync
rsync を使用すると、削除するファイルを指定し、「テスト実行」を実行して、実際に実行したときに何が起こるかを確認することもできます。
努力する
rsync -av --dry-run --delete-before fromA toB
--delete-before は、スペースが足りないシステムでファイルをマージするのに適しています。テストの実行に満足している場合は、この--dry-run
オプションを削除してください。
マンページをチェックして、さまざまな「削除」オプションをすべて確認し、どのオプションが自分に最適かを判断することをお勧めします。
--delete-excluded
移動に関連していないターゲットのすべてのファイルを削除するには、このオプションを使用します。もう一度--dry-run
実行する前に、削除する内容を確認してください。
転送中にソースファイルを削除する機能がありますが、--remove-source-files
(mvと同様に)ディレクトリは削除されません。したがって、まだソースディレクトリを削除する必要があります。rm
答え3
あなたの声明によれば、ファイルがすでに存在するというエラーが発生します。 「toB」の下にフォルダとファイルはすでにありますか?主に「fromA」から「toB」にファイルをマージする場合は、ファイルを再帰的にコピー(cp -ar)してから「fromA」を削除することをお勧めします。
そうではなく、最初に「toB」が空でなければならず、「toB」の内容が「fromA」と同じであることを確認したい場合:
$ rm -rf toB
$ mv fromA toB