rsync 규칙은 긴 경로의 특정 하위 디렉터리만 동기화합니다.

rsync 규칙은 긴 경로의 특정 하위 디렉터리만 동기화합니다.

/home/x디렉토리에서 다음 콘텐츠 만 백업하기 위해 복잡한 rsync include/exclude를 수행하려고 합니다 .

  • 재귀적으로 모든 파일/디렉토리Documents
  • 재귀적으로 모든 파일/디렉토리.PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote/Databases/

제외 규칙을 사용하기 전에 모든 상위 디렉터리를 필수 디렉터리에 포함해야 한다는 것을 알고 있습니다. 그러나 아래 규칙 파일에서 볼 수 있듯이 이 설정은 매우 비효율적이며 규칙 파일을 완전히 복잡하게 만들어 읽기가 어렵습니다.

+ Documents
+ Documents/**
+ .PlayOnLinux
+ .PlayOnLinux/wineprefix
+ .PlayOnLinux/wineprefix/evernote
+ .PlayOnLinux/wineprefix/evernote/drive_c
+ .PlayOnLinux/wineprefix/evernote/drive_c/users
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote/Databases
+ .PlayOnLinux/wineprefix/evernote/drive_c/users/x/Local Settings/Application Data/Evernote/Evernote/Databases/**
- *

여기의 모든 것이 예상대로 작동합니다. 그러나 원래 디렉터리 구조를 유지하면서 긴 경로에 있는 특정 하위 디렉터리의 내용만 rsync 백업하는 더 좋고 효율적인 방법이 있습니까?

편집하다포함할 하위 디렉터리 이름을 개별적으로 정의할 필요 없이 세 개의 별표를 사용하여 한 수준 깊이의 하위 디렉터리 콘텐츠를 포함할 수 있다는 것을 발견했습니다(예: + Documents/***위 규칙에서 두 개의 관련 행을 대체하여). 그러나 이것은 한 수준 이상의 하위 디렉터리에서는 작동하지 않는 것 같습니다. 이 질문의 경우입니다.

답변1

rules="+ /Documents/**
+ /.Play...bases/**
+ */
- *"

echo $rules | rsync -rm -f ". -" --delete-excluded /home/x /dest

관련 정보