Directory
用mv合併文件夾?
如果我使用
mv
將名為“文件夾”的文件夾移動到已經包含“文件夾”的目錄,它們會合併還是被替換?
mv
無法合併或覆蓋目錄,即使您使用該選項,它也會失敗並顯示消息*“mv: cannot move ‘a’ to ‘b’: Directory not empty” 。*--force
您可以使用其他工具(如 、 或什至 )解決此
rsync
問題find
,cp
但您需要仔細考慮其含義:
rsync
可以將一個目錄的內容合併到另一個目錄中(理想情況下,使用--remove-source-files
1選項僅安全刪除那些成功傳輸的源文件,-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
之後執行類似操作才能擺脫空的源目錄樹。