특정 파일을 재귀적으로 동기화하지만 대상에 존재하는 하위 디렉터리에서만 가능합니다.

특정 파일을 재귀적으로 동기화하지만 대상에 존재하는 하위 디렉터리에서만 가능합니다.

다른 원격 서버에 두 개의 디렉토리 dirOrig가 있습니다 . dirDest그들은 모두 다양한 깊이의 많은 하위 디렉터리를 가지고 있습니다. 이제 특정 파일이나 확장자를 에서 로 재귀적으로 복사 해야 file1.txt합니다 . 그러나 이는 하위 디렉터리가 이미 .dirOrigdirDestdirDest

예를 들어, rsync를 사용하여 소스에서 대상으로 특정 파일만 체계적으로 복사할 수 있습니다.

rsync -zarv  --prune-empty-dirs --include "*/"  --include="file1.txt" --exclude="*" "dirOrig" "dirDest"

dirDest하지만 어떻게 이 복사본을 target()에 존재하는 하위 디렉터리 로만 제한할 수 있습니까?

답변1

어떤 명령어도 모르지만 제가 생각해낸 트릭은 다음과 같습니다.

  1. 복사 용rsync​​dirOrigserver1server2

    rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"

  2. dirOrig복사본 에 존재하지 않는 하위 디렉터리 삭제dirDestcomm

    comm -23 <( cd server2:dirOrig && find -mindepth 1 -type d | sort ) \ <( cd server2:dirDest && find -mindepth 1 -type d | sort ) \ | ( cd server2:dirOrig && xargs rm -rf )

  3. 마지막으로 체크섬을 기반으로 rsync를 수행하고 dirDest에 존재하지 않는 dirOrig의 모든 파일을 삭제합니다 dirDest.dirOrigfile1.txt

    rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig

관련 정보