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.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:/ .

정규식에는 묵시적인 ^and $및 기본적으로 emacs 구문이 사용됩니다. posix 버전을 선호할 수도 있습니다:

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

명령에 find이러한 옵션이 없으면 sed또는 이와 유사한 옵션을 사용하여 파일 이름을 필터링할 수 있습니다. 찾기는 전체 경로 이름을 생성하므로 /기본으로 사용할 rsync를 가져와야 합니다 .

관련 정보