Назад | Перейти на главную страницу

Сопоставление шаблонов комплексных чисел 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.jpg и т.п.

Вместо этого вы можете передать в 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 или аналогично, чтобы отфильтровать имена файлов. Так как поиск производит полные пути, вам нужно заставить rsync использовать / в качестве основы.