내 시나리오가 실제로 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 키 쌍이 있으므로 호스트 이름을 사용합니다.