FreeBSD 12.x: 특정 폴더를 내 대상 폴더에 동기화

FreeBSD 12.x: 특정 폴더를 내 대상 폴더에 동기화

위와 같이

예를 들어 설명하는 것이 가장 좋다고 생각합니다.

/mnt/source/source-folder
  -> sfolder1
  -> sfolder2 
  -> sfolder3
  -> sfolder4

"sfolder"에는 수십 개의 폴더와 그 안에 수백 개의 파일이 포함되어 있습니다.

"sfolder2 및 해당 내용"을 /mnt/destination/destination-folder에 복사하고 싶습니다.

나는 노력했다

rsync -nriv --stats --include "sfolder2" --exclude "*" /mnt/source/source-folder/ /mnt/destination/destination-folder/

rsync -nriv --stats --include "sfolder2*" --exclude "*" /mnt/source/source-folder/ /mnt/destination/destination-folder/

rsync -nriv --stats --include "*sfolder2*" --exclude "*" /mnt/source/source-folder/ /mnt/destination/destination-folder/

모든 경우에 통계 보고서는 "sfolder2" 폴더만 전송하며 "sfolder2" 내의 수십 개의 폴더와 수백 개의 파일은 무시됩니다.

내가 뭘 잘못했나요?

나의 실제 목표는 소스에서 대상으로 여러 폴더(위의 예제 폴더 설정, sfolder2 및 sfolder4)를 복사하는 것입니다. 현재 테스트할 때 폴더를 1개만 사용합니다.

감사해요!

답변1

"모든 곳"을 제외 하고 *전송 루트의 sfolder2파일 또는 디렉터리 만 전송하기 위해 포함했습니다.sfolder2

대신 /*소스 디렉터리와 관련된 파일만 제외할 수 있습니다. 즉 /sfolder3, 예를 들어 제외되면 /sfolder3상위 디렉터리가 제외되므로 내부의 모든 파일도 제외됩니다.

Use를 사용하면 /sfolder2/해당 디렉터리가 소스 디렉터리( /처음에)에 상대적이고 디렉터리( /끝에 있음)임을 분명히 알 수 있습니다. 또한 -r( -a아카이브 모드)를 다음으로 대체했습니다 -r.

rsync -naiv --stats --include='/sfolder2/' --exclude='/*' \
 /mnt/source/source-folder/ /mnt/destination/destination-folder/

sfolder2다음을 포함합니다 sfolder4:

rsync -naiv --stats --include='/sfolder2/' --include='/sfolder4/' --exclude='/*' \
 /mnt/source/source-folder/ /mnt/destination/destination-folder/

답변2

상대 경로를 사용하면 모든 --include합병증을 피할 수 있습니다 --exclude. 여기서 --relative( ) 플래그는 소스 경로가 타겟에 유지됨 -R을 나타낸다 . rsync소스에서 /./유지될 경로의 시작을 표시합니다. (이것이 없으면 전체 경로가 유지됩니다.)

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder2/ /mnt/destination/destination-folder

그러면 sfolder2내용이 에 복사 됩니다 /mnt/destination/destination-folder/sfolder2.

sfolder2여러 폴더( 및 ) 를 복사하려면 sfolder4여러 소스 경로를 사용할 수 있습니다. 쉘이 {x,y}다음과 같이 지원 그룹을 처리하는 경우

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder{2,4}/ /mnt/destination/destination-folder

아니면 다른 상황

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder2/ /mnt/source/source-folder/./other4/ /mnt/destination/destination-folder

--recursive(그런데 ( -r)를 사용하여 파일 트리를 복사하는 대신 --archive( -a) 또는 추가 --times( -t)를 사용하여 rsync동일한 파일의 향후 복사본을 최적화할 수 있습니다. 제 예에서는 을 사용했습니다 . 소유권 및 권한 복사를 피하려면 -a사용할 수 있습니다. -rt.)

관련 정보