여러 소스를 동기화하고 싶고 이를 달성하는 가장 좋은 방법을 알고 싶습니다.
예를 들어
/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