rsync ‘cannot delete non-empty directory’ 錯誤,即使使用 –force 選項
執行此命令時:
$ sudo rsync -r --delete --force --checksum --exclude=uploads /data/prep/* /data/app/
我得到以下輸出:
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor cannot delete non-empty directory: html/js/ckeditor/_source/plugins cannot delete non-empty directory: html/js/ckeditor/_source/plugins cannot delete non-empty directory: html/js/ckeditor/_source cannot delete non-empty directory: html/js/ckeditor/_samples cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor
從閱讀
man rsync
中我的印像是,該--force
選項會告訴 rsync 刪除這些非空目錄,這是預期的結果。參考:
--force force deletion of dirs even if not empty
如何修改命令以刪除非空目錄?
我在 Gentoo Base System 版本 2.0.3 上使用 rsync 版本 3.0.8,以防萬一。
**更新:**添加
sudo
到命令中以明確這不是文件權限問題。
您是否嘗試添加
--delete-excluded
?如果您在“遠端”端刪除排除文件夾中的目錄,
rsync --delete
則不會刪除“本地”站點上的排除文件夾。
以下是此問題的可能來源:
(1)此錯誤可能是-b (–backup) 選項的結果。此選項將通過在文件名上附加波浪號 ( ~ ) 來創建每個已刪除文件的備份。(這讓我很困惑,因為文件名顯然是備份,但目錄名不是,因為你看不到波浪號。)
要檢查這是否相同,請在最深層讀取目標目錄,並檢查是否有任何波浪號 (~) 結尾文件。請注意,這些波浪號附加文件名在某些常見的文件瀏覽系統中是不可見的,因此您可能看不到它們。
要解決這種情況,請首選 –backup-dir=DIR 選項,例如 –backup-dir=.rsync_bak。
(2) –exclude 選項可以有相同的結果。這可能發生在你的情況下。模式系統很強大,但可能會產生誤導。例如,如果你寫 –exclude=’*~’,這將跳過所有波浪號結尾的文件,結果與上面的情況 (1) 完全相同。
從 rsync 手冊頁:
如果模式以 / 開頭,則將其錨定到文件層次結構中的特定位置,否則與路徑名的末尾匹配
Si 如果你寫–exclude=uploads,這將排除所有名為“updloads”的文件,在你的文件樹的任何級別。
檢查無法刪除的目錄中是否有名為“uploads”的文件。
解決方案是將“–exclude=uploads”更改為“–exclude=uploads/”