Rsync 포함 및 제외 옵션을 사용하여 디렉터리와 하위 디렉터리를 포함하지만 하위 디렉터리의 파일은 제외합니다.

Rsync 포함 및 제외 옵션을 사용하여 디렉터리와 하위 디렉터리를 포함하지만 하위 디렉터리의 파일은 제외합니다.

내 시나리오가 실제로 rsync로 처리될 수 있는지 궁금합니다. Rsync는 로컬과 원격 간에 잘 작동합니다.

htdocs/    
  folderswithfilesIneed/
    somefilesandfolders.jpg
    afolder/
      somefiles.png
  version/
    photofolder/
      photowithstupidname.jpg
      ...
   anotherfolderwithstupidname/
      photowithstupidname.jpg
      ...
   ...

이 모든 파일과 폴더를 동기화하고 싶지만 "photofolder" 및 "anotherfolderwithstupidname"에 있는 모든 파일을 제외하고 싶습니다.

누구든지 이것을 한번에 생각해 보았습니까?

편집: 좀 더 명확하게 말하면 "버전"에 폴더가 많기 때문에 해당 내용을 하나씩 제외할 수는 없습니다.

답변1

물론 이는 제외 규칙을 사용하면 쉽게 수행할 수 있습니다. 디렉터리와 해당 콘텐츠를 모두 제외하려면 디렉터리 자체를 제외하고 탐색도 하지 마세요. 디렉토리만 포함 somedir하고 내용은 포함하지 않으려면(예: 빈 디렉토리 전송) 을 제외하세요 somedir/*. 제외 절이 로 시작하는 경우 /이는 동기화 중인 디렉터리 루트의 경로입니다.

rsync -a --exclude='/version/photofolder/*' --exclude='anotherfolderwithstupidname/*' htdocs/ elsewhere/

모든 하위 디렉터리를 포함 …/version하고 디렉터리가 아닌 파일은 포함하지 않고 …/version하위 디렉터리의 콘텐츠를 제외하려는 경우:

rsync -a --include='/version/*/' --exclude='/version/*' htdocs/ elsewhere/

모든 하위 디렉터리와 해당 내용을 포함하되 …/version디렉터리가 아닌 다음 파일을 제외하려는 경우 …/version:

rsync -a --include='/version/*/' --include='/version/*/*' --exclude='/version/*' htdocs/ elsewhere/

답변2

새 명령 문자열은 --included 디렉터리를 생성하고 해당 내용 디렉터리 및/또는 파일을 복사하지만 깊이는 2개 디렉터리뿐입니다. 왜?

rsync -avid --progress ~/MyDocuments/'Inet Publishing'/ --recursive --include='LandisTwo (2019)' --include='LandisTwo (2020) {backup}' --include='*.*' --exclude='**/' e6420:/home/landis/Media/2TBackup/Backups/MyDocuments/"Inet\ Publishing"/ | tee -a ~/logs/Backup-InetPublishing_2020.txt
  • 디렉터리가 생성되었지만 파일이 디렉터리에 복사되지 않은 것을 발견했습니다(재귀 없음). 상위 디렉터리의 파일은 복사되지만 하위 디렉터리는 복사되지 않습니다. 이를 처리합니다.

이것은 상위 ../Inet\ Publishing을 rysnc'ing할 때 전체 디렉터리 및 모든 사이트(-avin의 "n") 외에도 워크스테이션에서 서버까지 나에게 적합하며 내 개인 사이트(rysnc)도 백업할 수 있습니다. 다른 서버로의 "시운전"은 삭제해주세요. ).

--exclude */는 "Inet Publishing/"의 다른 모든 디렉터리이며 --include per man rsync 프로세스 순서 뒤에 와야 하는 것 같습니다(--include 앞에 오면 모든 것이 --exclude되고 더 이상 추가 토큰이 처리되지 않습니다). , 적어도 그것이 내가 그것을 읽고 실제로 이것을 생각해 낸 방법입니다).

이것은 실제로 제가 cron으로 실행하는 스크립트 중 하나의 줄입니다. *분명히 대상 호스트는 IP일 수 있습니다. 호스트는 /etc/hosts에 정의되어 있고 SSH 키 쌍이 있으므로 호스트 이름을 사용합니다.

rsync -avin --progress ~/MyDocuments/'Inet Publishing'/ --include='LandisTwo(2019)' --include='LandisTwo(2020) {백업}' --exclude='*/' e6420:/home /landis/Media/2TBackup/Backups/MyDocuments/ | tee -a ~/logs/Backup-InetPublishing_2020.txt

관련 정보