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

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

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

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

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

dirDest하지만 이 복사본을 대상( ) 에 있는 하위 디렉터리로만 제한하는 방법

답변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. dirDest마지막으로 체크섬을 기반 으로 rsync dirOrig하고 dirDest에 없는 dirOrig의 모든 파일을 삭제합니다.file1.txt

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

관련 정보