여러 소스 폴더를 재동기화하는 방법

여러 소스 폴더를 재동기화하는 방법

여러 소스를 재동기화하고 싶은데 이를 달성하는 가장 좋은 방법이 궁금합니다.

예를 들어

/etc/fstab
/home/user/download

나는 3가지 해결책을 생각했다.

  • 솔루션 1

rsync에 대한 다중 호출

rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp

단점: 통계를 집계하기가 더 어렵습니다.

  • 솔루션 2

tobackup심볼릭 링크가 포함된 폴더를 만들고 -L옵션을 사용하세요.

sync -aL /home/user/tobackup bkp

단점: 백업할 콘텐츠에는 심볼릭 링크가 포함되어서는 안 됩니다.

  • 솔루션 3

파일을 백업으로 이동하고 원래 위치에 심볼릭 링크를 만듭니다.

rsync -a /home/user/tobackup bkp

단점: 일부 수동 구성

어느 것을 추천하시나요?

더 좋은 방법이 있나요?

답변1

여러 소스 인수를 전달할 수 있습니다.

rsync -a /etc/fstab /home/user/download bkp

그러면 사용자가 제공한 별도의 명령과 같이 bkp/fstab및 가 생성됩니다. bkp/download대신 소스 구조를 보존하는 것이 바람직할 수 있습니다. 이렇게하려면 /소스로 사용하고포함-제외 규칙복사할 파일을 지정합니다. 이를 수행하는 방법에는 두 가지가 있습니다.

  • /***전체 디렉터리 트리를 복사하려는 경우 디렉터리 끝에 각 파일과 해당 파일로 이어지는 각 디렉터리 구성 요소를 명시적으로 포함합니다 .

    rsync -a \
        --include=/etc --include=/etc/fstab \
        --include=/home --include=/home/user --include='/home/user/download/***' \
        --exclude='*' / bkp
    
  • rsync가 복사할 파일을 검색할 때 순회하도록 모든 최상위 디렉터리와 (for )를 사용하여 두 번째 수준 디렉터리를 포함 /*/하되 , 파일 이 복사되지 않는 디렉터리는 제거합니다. 이는 상위 항목을 명시적으로 나열할 필요가 없기 때문에 더 편리합니다. 레벨 수를 계산하는 대신 사용할 수도 있지만 , 포함 규칙 중 어느 것도 외부 항목 과 일치할 수 없더라도 rsync가 전체 파일 시스템을 탐색하여 디렉토리를 탐색하므로 여기서는 비실용적입니다 ./etc/home/*/*//home/user--prune-empty-dirs --include='*/'/etc/home/user/download

    rsync -a --prune-empty-dirs \
        --include='/*/' --include='/*/*/' \
        --include=/etc/fstab \
        --include='/home/user/download/***' \
        --exclude='*' / bkp
    

답변2

나는 Gilles의 답변을 정말 좋아하지만 디렉터리 구조를 유지하면서 여러 폴더를 동기화해야 하는 요구 사항은 옵션과 함께 여러 소스 인수를 전달함으로써 가장 잘 충족된다는 점을 추가하고 싶습니다 --relative.

이 경우 다음과 같은 결과를 얻을 수 있습니다.

rsync -aR /etc/fstab /home/user/download bkp

그 결과는 bkp/etc/fstab및 입니다 bkp/home/user/download.

이것에 대한 가장 좋은 부분은 (rsync v. 2.6.7 이후로) 우리가 대상에서 복제하려는 디렉터리 구조의 양을 본질적으로 제어할 수 있다는 것입니다. ( 옵션
에 대한 설명서를 참조하십시오.--relative여기)

예를 들어 우리가 이렇게 했다면

rsync -aR /home/./user1/download /home/./user2/download bkp

bkp/user1/download우리는 and 로 끝날 것입니다 bkp/user2/download.

답변3

쉼표로 구분된 소스 목록을 포함하는 중괄호도 작동합니다.

rsync -vap --progress --stats root@server:{/etc,/root/backups,/home/ultralazer} /mnt/bigdrive

cp 및 기타 특정 유틸리티를 사용하여 중괄호 sytnax를 호출할 때 발생하는 상황과 다소 유사합니다.

cp -vr /etc /root/backups /home/{ultralazer,zerocool} /mnt/bigdrive

관련 정보