rsync: 이름이 특정 문자열로 끝나는 파일을 포함하는 방법

rsync: 이름이 특정 문자열로 끝나는 파일을 포함하는 방법

중복 가능성:
Rsync 필터: 하나의 패턴만 복사

rsync를 사용하여 서버(또는 ssh를 통한 서버)에서 tar.gz. 그러나 그것은 단지 스트레칭이 아닙니다. 어떤 경우에는 -server-cloudimg-amd64-root.tar.gz.

단순한 상황에서는 --include="**/*-server-cloudimg-amd64-root.tar.gz이해가 되지 않습니다. 나는 rsync include/exclude가 간단하지 않다는 것을 알고 있었지만 그것이 작동할 것이라고는 기대하지 않았습니다. 전송할 디렉터리를 지정해야 한다는 것을 이해합니다. 그러나 rsync의 논리는 (내가 본 어떤 경로 ACL 규칙과도 달리) 나에게 항상 미스터리였습니다. 왜냐하면 상위 디렉터리도 별도로 일치시켜야 하기 때문입니다. 필요한 것은 mkdir -p ${DIRNAME}명령이 지정된 디렉토리의 상위 디렉토리를 생성하는 것과 거의 같은 방식으로 "파일이 일치하는 경우 다른 일치를 암시하지 않고 전송에 필요한 모든 디렉토리를 포함"하는 의미의 옵션이라고 생각합니다. 필요합니다. rsync에는 그러한 옵션이 표시되지 않습니다. 이 작업을 한 번에 쉽게 수행할 수 있는 방법이 있나요?

답변1

이 경우 원격 서버에 물리적으로 접근할 수 없을 때 모든 포함과 제외에 접속해야 합니다. 여기에 SE에 관한 훌륭한 게시물이 있습니다(특집 답변 참조).

Rsync 필터: 하나의 패턴만 복사

내 생각에는 당신에게 다음과 같은 것이 필요하다고 생각합니다.

rsync -am --include='*.tar.gz' --include='*/' --exclude='*' SOURCE DESTINATION

답변2

당신이 사용하고 싶은 find:

find /top/level/path -name '*.tar.gz' -exec rsync {} +

top/level/path은 최상위 디렉토리이며 모든 하위 디렉토리에서 검색이 수행됩니다. 검색 범위를 좁히려면 -maxdepth또는 옵션을 사용하고 또는 같은 와일드카드를 사용할 수 있습니다.-mindepth?*-name

물론, rsync예를 들어 다른 옵션을 추가할 수도 있습니다 rsync -av. 마지막 부분은 {} +rsync에 명령으로 찾은 파일 목록을 제공합니다 find.

rsync로 전달될 파일 목록을 보려면 sybstituting을 통해 rsync다음 명령을 사용하여 테스트 할 수 있습니다 echo.

find /top/level/path -name '*.tar.gz' -exec echo {} +

관련 정보