Сопоставление шаблонов комплексных чисел Rsync

Сопоставление шаблонов комплексных чисел Rsync

Я работаю над переносом миграции большого веб-сайта WordPress и хочу перенести только оригинальные изображения. Я не хочу копировать изображения, которые создает WordPress. Используя rsync, я не вижу в документации способа учесть множественные вариации размеров изображений и исключить их. Лучшее, что я придумал, — это создать правило для каждого возможного сценария размера изображения. Это лучшее, что я получу, или есть способ DRY это убрать?

В качестве примера:

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.jpgи т.д.

решение1

Вместо этого вы можете передать в rsync список файлов, которые вы хотите скопировать, и использовать другие средства для исключения нежелательных имен изображений. Это может быть так же просто, как использование findс исключением регулярного выражения, например:

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

Обратите внимание, что регулярное выражение подразумевает ^и $использует синтаксис emacs по умолчанию. Вы можете предпочесть версию posix:

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

Если у вашей findкоманды нет этих опций, вы можете использовать sedили подобный для фильтрации имен файлов. Поскольку find выдает полные пути, вам нужно заставить rsync использовать его /в качестве базы.

Связанный контент