Linux

使用 rsync 僅刪除無關文件

  • April 23, 2021

比較兩個目錄結構並刪除目標位置中無關文件和目錄的最佳方法是什麼?

我有一個正在開發的小型網路照片庫應用程序。使用者使用 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).

引用自:https://serverfault.com/questions/275493