포함 옵션을 사용하여 특정 유형의 파일에만 rsync 복사
다음 bash 스크립트를 사용하여 특정 확장자 (이 경우 * .sh)의 파일 만 복사하지만 여전히 모든 파일을 복사합니다. 뭐가 문제 야?
부터 = $ 1 to = $ 2 rsync -zarv --include = "*. sh"$ from $ to
나는 생각한다 --include
, 그렇지 않으면 의해 제외 된 파일의 하위 집합을 포함하는 데 사용 --exclude
하지 않고 파일 만 포함하여보다를. 즉, 포함 의미를 제외하지 않는 것에 대해 생각해야합니다 .
대신 시도하십시오.
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
rsync 버전 3.0.6 이상의 경우 순서를 다음과 같이 수정해야합니다 (설명 참조).
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
-m
플래그를 추가하면 대상에 빈 디렉터리 구조가 생성되지 않습니다. 버전 3.1.2에서 테스트되었습니다.
따라서 * .sh 파일 만 원하는 경우 모든 파일을 제외하고 --exclude="*"
모든 디렉토리 --include="*/"
를 포함하고 모든 * .sh 파일을 포함해야합니다 --include="*.sh"
.
매뉴얼 페이지 의 패턴 규칙 포함 / 제외 섹션에서 좋은 예를 찾을 수 있습니다 .
@chepner의 대답은 파일이 포함되어 있는지 여부에 관계없이 모든 하위 디렉토리를 복사합니다. 파일을 포함하지 않고 디렉토리 구조를 유지하는 하위 디렉토리를 제외해야하는 경우
rsync -zarv --prune-empty-dirs --include "*/" --include="*.sh" --exclude="*" "$from" "$to"
한 가지 더 추가 : (재귀없이) 한 디렉토리에서만 확장명으로 파일을 동기화해야하는 경우 다음 과 같은 구성을 사용해야합니다.
rsync -auzv --include './' --include '.ext' --exclude '*' /source/dir/ /destination/dir/
첫 번째의 점에주의하십시오 --include
. --no-r
이 구조에서는 작동하지 않습니다.
다음은 man 페이지의 중요한 부분입니다.
전송할 파일 / 디렉토리 목록이 빌드되면 rsync는 포함 / 제외 패턴 목록에 대해 전송할 각 이름을 차례로 확인하고 첫 번째 일치 패턴이 작동합니다. 제외 패턴 인 경우 해당 파일은 다음과 같습니다. 건너 뛰었습니다. 포함 패턴이면 해당 파일 이름을 건너 뛰지 않습니다. 일치하는 패턴이 없으면 파일 이름을 건너 뛰지 않습니다.
요약:
- 패턴과 일치하지 않으면 파일이 복사됩니다!
- 패턴이 일치하면 알고리즘이 종료됩니다.
또한 슬래시로 끝나는 것은 디렉토리와 일치 find -type d
합니다.
이 답변을 위에서 분리 해 봅시다.
rsync -zarv --prune-empty-dirs --include "*/" --include="*.sh" --exclude="*" "$from" "$to"
- 디렉토리를 건너 뛰지 마십시오
.sh
파일을 건너 뛰지 마십시오- 모두 건너 뛰기
- (암묵적으로 아무것도 건너 뛰지 마십시오. 그러나 위의 규칙은 기본 규칙이 발생하지 않도록 방지합니다.)
마지막으로, --prune-empty-directories
첫 번째 규칙은 모든 곳에 빈 디렉토리를 만들지 않습니다.
'Nice programing' 카테고리의 다른 글
HTTP 범위 헤더 (0) | 2020.10.13 |
---|---|
인라인 변수로 여러 줄 Python 문자열을 어떻게 생성합니까? (0) | 2020.10.13 |
Heroku는 Rails 4의 자산 파이프 라인에서 파일을 컴파일하지 않습니다. (0) | 2020.10.13 |
Postgres에서 열거 형 값을 삭제하는 방법은 무엇입니까? (0) | 2020.10.13 |
라벨로 선택하는 Pandas는 때때로 Series를 반환하고 때로는 DataFrame을 반환합니다. (0) | 2020.10.12 |