Rsync 複數模式匹配

Rsync 複數模式匹配

我正在致力於遷移大型 WordPress 網站,並且只想遷移原始圖片。我不想複製 WordPress 創建的圖片。使用 rsync,我在文件中沒有看到一種方法來解釋圖像大小的多種變化並排除它們。我想出的最好辦法是為每種可能的圖像大小場景建立一個規則。這是我能得到的最好的結果還是有辦法把它弄乾?

舉個例子:

rsync -avPzn -e ssh webhost:/site/www.domain.com/images . 
--exclude=**\-[0-9][0-9]x[0-9][0-9].jpg 
--exclude=**\-[0-9][0-9][0-9]x[0-9][0-9].jpg 
--exclude=**\-[0-9][0-9]x[0-9][0-9][0-9].jpg 
--exclude=**\-[0-9][0-9]x[0-9][0-9].png 
--exclude=**\-[0-9][0-9][0-9]x[0-9][0-9].png 
--exclude=**\-[0-9][0-9]x[0-9][0-9][0-9].png 
...

一個名為 的影像image.jpg將有多個名為image-100x100.jpgetc 的副本。

答案1

您可以改為將要複製的檔案清單透過管道傳輸到 rsync 中,並使用其他方法來排除不需要的映像名稱。這可以像使用find正規表示式排除一樣簡單,例如:

ssh webhost find /site/www.domain.com/images \
  ! -regex '.*[0-9]+x[0-9]+\.\(png\|jpg\)' | \
rsync -avPzn --files-from=- webhost:/ .

請注意,正規表示式有一個隱含的^and $,並且預設使用 emacs 語法。您可能會更喜歡 posix 版本:

-regextype posix-extended -regex '.*[0-9]+x[0-9]+\.(png|jpg)'

如果您的find命令沒有這些選項,您可以使用sed或類似的命令來過濾掉檔案名稱。由於 find 會產生完整路徑名,因此您需要使用 rsync/作為基礎。

相關內容