rsync의 include="*"는 모든 하위 디렉터리의 모든 숨겨진 파일을 복사합니까?

rsync의 include="*"는 모든 하위 디렉터리의 모든 숨겨진 파일을 복사합니까?

수천 개의 하위 디렉터리와 깊은 하위 폴더 경로가 포함된 디렉터리를 백업하고 싶습니다. 이러한 디렉터리 중 상당수 .에는 .. 지정으로 충분합니까 include="*"? 이것이 모든 것을 다룰 것인가?

rsync -rvh --compress-level=0 --stats --progress --include ".*"  user@vm:/mnt/storage8/backups ~/data/backup_of_backups/

답변1

모든 파일은 기본적으로 포함되므로 모든 파일을 포함하려면 --include또는 옵션을 전달하지 마십시오 .--exclude

모드를 사용하는 경우 rsync는 도트 파일을 특별히 처리하지 않습니다. 도트 파일을 건너뛰려면 를 사용해야 합니다 --exclude='.*'.

여기에는 --include='.*'도트 파일만 포함됩니다. 이것은 "모든 문자"를 나타내고 "앞의 문자 또는 그룹의 수에 관계없이"를 의미하는 정규 표현식과 달리 .자체적으로 "모든 문자 시퀀스"를 의미하는 쉘 패턴입니다 . 제외 지시문이 없어도 모든 파일을 얻을 수 있으므로 포함 지시문은 의미가 없습니다. 그러나 일부 제외 지시문이 있는 경우 "닷 파일을 포함한 모든 파일 포함"을 의미하는 것이 아니라 "닷 파일 포함"을 의미할 뿐입니다. 이름이 점으로 시작하지 않는 디렉토리로 자체적으로 재귀되지는 않습니다.*.*--include='.*'

답변2

아니요포함 또는 제외 패턴을 지정하면 rsync숨겨진 파일과 디렉터리가 복사됩니다.

rsync --stats --progress -av user@vm:/mnt/storage8/backups ~/data/backup_of_backups/

답변3

사용 shopt -s dotglob. 여기에는 도트 파일이 포함됩니다. 이것은 bash 설정이므로 mv명령도 수정됩니다.

https://unix.stackexchange.com/a/446353/346155

편집: 허용된 답변에 따르면 rsync에는 기본적으로 도트 파일이 포함되어 있습니다. 이 질문은 "rsync dot file"에 대한 Google의 최고 결과이므로 rsync 명령이 실패했습니다. OP는 일반 rsync를 사용하려고 시도하지 않았지만 디렉토리가 복사되지 않도록 디렉토리 끝에 슬래시 뒤에 별표를 추가하는 경우가 많습니다.입력하다rsync의 "sync"가 실제로 디렉터리를 동기화한다고 가정할 때 발생하는 대상 디렉터리입니다. 그래서 제 경우에는 dotglob의 쉘 옵션을 사용하여 제 문제를 해결했고 귀하의 문제도 해결할 수 있습니다. 또한 다른 /dir/*유형의 와일드카드 일치 와도 작동합니다 . 개인적으로 나는 이것이 /를 사용하는 것보다 더 직관적이고 명확하다고 생각합니다. 이는 /dir/대상 디렉토리와 함께 사용될 때 해석되는 긴 디렉토리 구분 기호 목록을 완성하는 것을 의미할 수 있기 때문입니다.

또한 이 옵션은 Bash에서 기본적으로 적용되지 않기 때문에 기본적으로 이 셸 옵션을 사용하면 해로운 부작용이 있는지 알고 싶습니다. 나는 이것이 Unix 디자인의 일부일 뿐이라고 생각합니다. 숨겨진 파일은 기본적으로 복사되거나 이동되어서는 안 됩니다(다시 말하지만, form 을 사용하지 않는 한 /dir/). 유해한 이유가 누락되지 않는 한 더 직관적이고 예상되는 것처럼 모든 파일을 기본값으로 복사하는 것을 옹호합니다(내가 생각할 수 있는 유일한 것은 사람들이 이동하고 싶지 않거나 단지 원하는 위치 관련 정보를 가지고 있다는 것입니다) 구성 파일이 아닌 디렉터리에서 미디어 데이터를 복사하려면 전혀 복사하지 않는 것보다 복사하는 것이 더 낫다고 생각할 수도 있습니다.

관련 정보