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

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

여러 소스를 동기화하고 싶고 이를 달성하는 가장 좋은 방법을 알고 싶습니다.

예를 들어

/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
    
  • /*//etc모든 최상위 디렉터리를 포함하려면 (복사할 파일을 찾을 때 rsync가 순회하도록)를 사용하고 , /home모든 두 번째 수준 디렉터리를 포함하려면 (for)를 사용하지만 파일을 복사하지 않는 디렉터리를 제거합니다. 이는 부모를 명시적으로 나열할 필요가 없기 때문에 더 편리합니다. 레벨 수를 계산하는 대신 사용할 수도 있지만 rsync는 전체 파일 시스템을 탐색하여 디렉토리를 탐색하기 때문에 여기서는 비실용적입니다. 포함 규칙이 및 외부의 항목과 일치할 수 없더라도 마찬가지입니다./*/*//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

--relative저는 Giles의 답변을 정말 좋아하지만, 제 생각에는 디렉터리 구조를 유지하면서 여러 폴더를 동기화하는 문제는 해당 옵션 Require와 함께 여러 소스 인수를 전달함으로써 가장 잘 해결된다는 점을 추가하고 싶습니다 .

이 경우 우리는 다음과 같은 것을 가질 수 있습니다:

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우리는 및 으로 끝날 것입니다 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

관련 정보