Directory

用mv合併文件夾?

  • October 20, 2021

如果我使用mv將名為“文件夾”的文件夾移動到已經包含“文件夾”的目錄,它們會合併還是被替換?

mv無法合併或覆蓋目錄,即使您使用該選項,它也會失敗並顯示消息*“mv: cannot move ‘a’ to ‘b’: Directory not empty” 。*--force


您可以使用其他工具(如 、 或什至 )解決此rsync問題findcp但您需要仔細考慮其含義:

  • rsync可以將一個目錄的內容合併到另一個目錄中(理想情況下,使用--remove-source-files1選項僅安全刪除那些成功傳輸的源文件,-a如果您願意,還可以使用通常的權限/所有權/時間保留選項)

……但這是一個完整的複制操作,因此可能會佔用大量磁碟空間。

  • **目前首選選項:**您可以組合rsync’s--link-dest=DIR選項(在可能的情況下創建硬連結而不是複製文件內容)並--remove-source-files獲得與正常mv.

為此,--link-dest需要給出目錄的絕對路徑(或從目標的相對路徑)。

但這是以--link-dest一種意想不到的方式使用(可能會或可能不會導致並發症),需要知道(或確定)源的絕對路徑(作為 的參數--link-dest),並且再次留下一個空目錄結構以清理為每1。

  • 您可以使用find順序在目標上重新創建源目錄結構,然後單獨移動實際文件

……但這必須通過源多次遞歸併且可能遇到競爭條件(在多步驟過程中在源處創建新目錄)

  • cp可以創建硬連結(簡單地說,是指向同一個現有文件的附加指針),這會創建非常類似於合併的結果mv(並且非常高效,因為只創建指針而無需複制實際數據)

……但是這個再次遭受可能的競爭條件(源中的新文件被刪除,即使它們沒有在上一步中被複製)

這些變通方法(如果有的話)中的哪一個是合適的,很大程度上取決於您的具體案例。

與往常一樣,在執行任何這些命令之前請三思,並進行備份。


1:請注意,rsync --remove-source-files不會刪除任何目錄,因此您必須在find -depth -type d -empty -delete之後執行類似操作才能擺脫空的源目錄樹。

引用自:https://unix.stackexchange.com/questions/127712