我只想將所有文件和資料夾(包括任何子目錄及其文件)移動並覆蓋到另一個資料夾及其子資料夾。
我已嘗試以下命令,但它們不適用於子目錄及其檔案。
mv -f fromA/* toB/
mv -f fromA/{,.}* toB/
因此,資料夾 A 中的所有檔案都會移至資料夾 B,但不會將 A/sub 移至 B/sub。
我收到錯誤無法將“fromA/subA”移到“toB/subB”:檔案存在
如果我逐一查看每個資料夾,它會起作用,但我確信我遺漏了一些東西。我已經看到了大多數(如果不是全部)相關答案,但它們都不起作用。
答案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