
Я работаю над переносом миграции большого веб-сайта 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 использовать его /
в качестве базы.