위와 같이
예를 들어 설명하는 것이 가장 좋다고 생각합니다.
/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
.)