다음 모드는 .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/