如何將所有文件和子目錄從一個資料夾移動到另一個資料夾? mv 指令不移動任何子目錄

如何將所有文件和子目錄從一個資料夾移動到另一個資料夾? mv 指令不移動任何子目錄

我只想將所有文件和資料夾(包括任何子目錄及其文件)移動並覆蓋到另一個資料夾及其子資料夾。

我已嘗試以下命令,但它們不適用於子目錄及其檔案。

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

相關內容