지정된 하위 디렉터리의 특정 파일 형식만 재동기화

지정된 하위 디렉터리의 특정 파일 형식만 재동기화

이것은 내 소스 디렉터리 구조입니다.

../openwrt
../openwrt/BackupOfPackages
../openwrt/BackupOfSettings
../openwrt/BackupOfImages

rsync를 사용하여 대상 디렉터리에 미러링하고 싶습니다. 세 개의 하위 디렉터리에 있는 파일만 재동기화하고 싶고 확장명이 있는 파일 만 동기화하고 싶습니다:
.installedfrom thefolderfromthefolderfromthefolderBackupOfPackages
.img.gzBackupOfImages
.tar.gzBackupOfSettings

내 소스 디렉토리에는 basedir "openwrt"와 각 하위 디렉토리에 다양한 파일이 혼합되어 있습니다. 그러나 위에서 언급한 것처럼 특정 하위 디렉터리의 특정 파일 형식만 동기화하고 싶습니다.

여기에 이미지 설명을 입력하세요.

이것은 내 rsync 명령입니다.

openWrtPath="/mnt/usb/openwrt/"  
ncpPath="/media/myCloudDrive/openwrt"

rsync -vvrit --include='/' --include='BackupOfSettings/' --include='BackupOfSettings/**.tar.gz' --include='BackupOfPackages/' --include='BackupOfPackages/**.installed' --include='BackupOfImages/' --include='BackupOfImages/**.img.gz' --exclude='/*' --delete --delete-excluded $openWrtPath ncp:$ncpPath

명령을 실행하면 이것이 표시되고 숨겨지는 내용입니다. basedir에서 opkg.installed 및 "새 폴더"를 올바르게 숨기지만 BackupOfSettings, BackupOfImages 등에서 .installed와 같은 파일 형식은 숨기지 않습니다.

여기에 이미지 설명을 입력하세요.

Rsync는 소스에서 대상까지 거의 모든 것을 동기화합니까? 여기에 이미지 설명을 입력하세요.

확장만 복사하도록 rsync 명령을 변경하는 방법:
.installedBackupOfPackages폴더 로 폴더
.img.gzBackupOfImages폴더
.tar.gz로 즉: 다양한 하위 디렉터리에서 대상으로 전송하면 안 되는 파일 형식이 원본 시스템의 해당 하위 디렉터리에 있더라도 올바르게 숨깁니다.BackupOfSettings

고쳐 쓰다

글을 올리고 나서 답을 찾은 것 같아요.. 바꿔보니 --exclude='/*'원하는 --exclude='*'대로 되는 것 같았어요. 누군가 이 두 가지 제외 사항의 차이점을 설명할 수 있습니까?

수단 '/*':"basedir(openwrt)의 모든 항목을 제외합니다. 이는 basedir의 하위 디렉터리에는 적용되지 않습니다."?

감사합니다!

답변1

'/*'"basedir(openwrt)의 모든 항목을 제외합니다. 이는 basedir의 하위 디렉터리에는 적용되지 않습니다"라는 의미입니까 ?

예, /이는 전송 디렉터리의 루트이며 /*거기에 있는 모든 항목(파일 및 디렉터리)과 일치합니다.

명령의 포함을 다음과 같이 단축할 수 있습니다.

rsync -ai \
  --include='BackupOf***/' \
  --include='BackupOfImages/**.img.gz' \
  --include='BackupOfSettings/**.tar.gz' \
  --include='BackupOfPackages/**.installed' \
  --exclude='*' \
  --delete --delete-excluded \
  "$openWrtPath" ncp:"$ncpPath"

이것이 의미하는 바는 (예를 들어 ) --include='BackupOf***/'로 시작하는 모든 디렉토리 와 해당 하위 디렉토리를 포함한다는 것입니다. 이러한 하위 디렉터리를 포함할 필요가 없으면 으로 변경하고 , 파일 확장자를 2에서 1로 변경할 수도 있습니다 .BackupOfBackupOfImages/sub1/sub2/BackupOf*/***

-a포함 -t및 기타 옵션과 함께 아카이브 모드를 사용 하고 두 변수를 모두 참조했습니다.

답변2

/rsync는 고려하는 경로의 시작 부분에 a를 포함하지 않습니다. 왜? 디자이너의 선택.

하지만 또 다른 문제가 있습니다. 하위 디렉터리에 파일을 포함하려면 포함에 **를 사용했습니다. 그러나 하위 디렉터리 자체는 제외됩니다. 포함 및 제외를 다음과 같이 변경해 보세요.

--include='*/' --include='BackupOfSettings/**.tar.gz' --include='BackupOfPackages/**.installed' --include='BackupOfImages/**.img.gz' --exclude='*' --prune-empty-dirs

이는 모든 디렉터리를 포함하고, 원하는 파일만 포함하고, 다른 파일은 포함하지 않으며, 빈 디렉터리를 삭제하는 것입니다.

또 다른 옵션은 다음과 같이 작성하는 것입니다.

--include='BackupOfSettings/' --include='BackupOfSettings/**/' --include='BackupOfSettings/**.tar.gz' --include='BackupOfPackages/' --include='BackupOfPackages/**/' --include='BackupOfPackages/**.installed' --include='BackupOfImages/' --include='BackupOfImages/**/' --include='BackupOfImages/**.img.gz' --exclude='*'

이 경우 여기에는 특정 디렉터리, 해당 하위 디렉터리 및 필수 파일이 포함됩니다. 검색을 피하려는 소스 트리에 다른 디렉터리가 많이 있는 경우 이 변형이 필요합니다.

답변3

@Freddy의 허용된 답변 확장

내 소스 및 대상 디렉터리:

openWrtPath="/mnt/usb/openwrt/"  
ncpPath="/media/myCloudDrive/openwrt"

내 목표는 소스 디렉터리의 BackupOfSettings라는 하위 폴더에 있는 .tar.gz 확장자를 가진 파일만 동기화하는 것입니다. BackupOfSettings 하위 폴더 내의 하위 폴더도 무시됩니다.

이것은 질문에 있는 명령의 단순화된 버전입니다. 신용 거래여기그리고여기rsync가 특정 하위 디렉터리의 특정 파일 형식을 동기화하는 방법에 대한 지침입니다.

rsync -vvritn --include='BackupOfSettings/' --include='BackupOfSettings/*.tar.gz' --exclude='*' $openWrtPath ncp:$ncpPath
  1. rsync를 사용하여 이를 달성하려면 먼저 필요한 파일이 포함된 하위 디렉터리를 포함해야 합니다.--include='BackupOfSettings/'
  2. 그런 다음 별도의 포함 파일에서 동일한 하위 디렉터리에 원하는 파일 형식과 일치하는 패턴을 정의해야 합니다.--include='BackupOfSettings/*.tar.gz'
  3. 그런 다음 다음을 사용하여 다른 모든 항목을 제외해야 합니다. --exclude='*'파일 일치 및 제외그리고명시적으로 포함되지 않은 폴더입니다.

--exclude='/*'그리고--exclude='*'

rsync -vvritn --include='BackupOfSettings/' --include='BackupOfSettings/*.tar.gz' --exclude='/*' $openWrtPath ncp:$ncpPath

위 명령은 BackupOfSettings 하위 폴더의 모든 파일을 허용합니다. 이 제외는 소스 디렉터리의 파일 및 하위 폴더와만 일치 하므로 --exclude='/*'... 일치하지 않습니다.문서소스 디렉터리의 하위 폴더에 있습니다.

관련 정보