Linux
使用 rsync 僅刪除無關文件
比較兩個目錄結構並刪除目標位置中無關文件和目錄的最佳方法是什麼?
我有一個正在開發的小型網路照片庫應用程序。使用者使用 FTP 添加和刪除圖像。我編寫的網路畫廊軟體即時創建新的縮略圖,但它不處理刪除。我想做的是安排一個命令/bash腳本以預定義的時間間隔處理這個問題。
原始圖像儲存在
/home/gallery/images/
相冊中,並使用子目錄組織在相冊中。縮略圖記憶體在 中/home/gallery/thumbs/
,使用與圖像目錄相同的目錄結構和文件名。我嘗試使用以下方法來實現這一點:
rsync -r --delete --ignore-existing /home/gallery/images /home/gallery/thumbs
如果所有縮略圖都已被記憶體,這將正常工作,但不能保證會出現這種情況,當發生這種情況時,縮略圖目錄將原始全尺寸圖像複製到其中。
我怎樣才能最好地實現我想要做的事情?
我認為這不是
rsync
最好的方法。我會使用如下的 bash 單線:$ cd /home/gallery/thumbs && find . -type f | while read file;do if [ ! -f "../images/$file" ];then echo "$file";fi;done
如果這個單行生成正確的文件列表,您可以修改它以執行
rm
命令而不是echo
命令。
你還需要
--existing
:rsync -r --delete --existing --ignore-existing /home/gallery/images /home/gallery/thumbs
從手冊頁:
--existing, --ignore-non-existing This tells rsync to skip creating files (including directories) that do not exist yet on the destination. If this option is combined with the --ignore-existing option, no files will be updated (which can be useful if all you want to do is delete extraneous files).