サブディレクトリとそのファイルを含むすべてのファイルとフォルダを別のフォルダとそのサブフォルダに移動して上書きしたいだけです。
次のコマンドを試しましたが、サブディレクトリとそのファイルでは機能しません。
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
オプションを削除してください。
さまざまな「削除」オプションをすべて確認して、どれが自分にとって最適かを判断するには、man ページを参照することをお勧めします。
移動に関係のない宛先内のすべてのファイルを削除する場合は、 オプションを使用できます--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