rsync: 제외 및 포함 필터 혼합

rsync: 제외 및 포함 필터 혼합

다음 모드는 .pdf 파일을 소스에서 대상으로 복사하고 제대로 작동합니다.

rsync -rv --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

하지만 파일 이름에 web이 포함된 파일을 제외하고 싶지만 작동하지 않고 web_profile.pdf 파일을 대상에 복사하기도 하는데 왜 이런 일이 발생합니까?

rsync -rv --include="*.pdf" --include="*/" --exclude="*web*.pdf" --exclude="*" --prune-empty-dirs /source/ ~/destination/

**/또한 특정 디렉토리 (예: 별 2개 및 별 1개) 를 제외하는 것이 확실하지 않습니다 .

누군가 rsync의 패턴 일치에 대한 내 의심을 해결할 수 있습니까?

--include="*.pdf"match *pdf, 예를 들어 특정 디렉터리를 제외하려면 ../web-info/..pdf어떻게 해야 합니까?

답변1

--include옵션의 순서 --exclude에 따라 다릅니다 .

모든 파일을 먼저 포함하므로 *.pdf나중에 제외되는 내용은 적용되지 않습니다. 또한 포함/제외 패턴은 경로 이름이 아닌 노드 이름(파일, 디렉터리 등)에 적용됩니다. 단, 패턴에 또는가 *web*.pdf없으면 제외는 제외되지 않습니다 ./***web*.pdf...web.../...pdf

일치하는 디렉토리 아래의 PDF가 아닌 모든 PDF를 원하는 경우 *web*다음이 작동합니다.

rsync -rv --exclude "*web*/" --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

*web*이렇게 하면 rsync가 다른 모든 디렉터리를 포함하여 모든 *.pdf파일을 포함하고 다른 모든 파일을 제외하는 일치하는 디렉터리로 반복되는 것을 방지할 수 있습니다 .

**위의 솔루션을 선호하지만 패턴에 a를 사용하는 것도 효과가 있을 수 있습니다.

rsync -rv --exclude "**web*.pdf" --include="*.pdf" --include="*/" --exclude="*" --prune-empty-dirs /source/ ~/destination/

관련 정보