Rsync 포함 제외

Rsync 포함 제외

나는 이와 같은 질문이 수십억 개 있다는 것을 알고 있습니다. 하지만 나는 그것들을 많이 시도했지만 이것이 작동하도록 할 수 없었다고 확신합니다. 따라서 이것을 중복으로 표시하지 마십시오.

다음과 같은 파일 시스템이 있습니다.

1_counts/
|_________sample1/
          |__________boring_file1
          |__________boring_file2
          |__________boring_dir1/
                     |__________boring_file1
                     |__________boring_file2
          |__________dir/
                     |__________boring_file1
                     |__________boring_file2
                     |__________another_dir/
                                |__________file1
                                |__________file2
                                |__________file3
                                |__________boring_dir/
                                           |__________boring_file
                                |__________boring_file.RData

여러 개의 "샘플" 디렉터리가 있습니다.

에서 파일 1, 2, 3을 동기화해야 합니다 another_dir/. 파일 구조를 유지하고 싶습니다(대상에 하위/디렉토리가 없음). 모든 것을 복사하고 싶지는 않습니다.

먼저 모든 것을 다음 위치에 넣어 보았습니다 dir/another_dir.

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/" \
--exclude="*" 1_counts/* .

메시지가 포함된 파일은 반환되지 않습니다 [sender] hiding directory sample_1 because of pattern *. 같은

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/***" \
--exclude="*" 1_counts/* .

이 옵션(여기서는솔루션 1)는 다음의 모든 항목을 검색했습니다 dir/another_dir/.

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/***" \
--exclude="*/*" 1_counts/* .

솔직히 말해서 나는 그것을 짐작했다. 왜 제외해야 하는지 모르겠습니다 */*.

내가 시도하면

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/" \
--exclude="*/*" 1_counts/* .

dir/another_dir목차 만 알 수 있고 내용은 알 수 없습니다. 예상대로.

만약 내가한다면

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/*" \
--exclude="*/*" 1_counts/* .

dir/내용은 없고 목차 만 나옵니다 . 나는 그것이 예상되는 것 같아요 (두 번째 답변여기another_dir) 하지만 왜 내가 미스터리를 얻지 못하는지 혼란스러워요 .

그래도, 이제 솔루션 1을 사용하여 1_counts/sample1/dir/another_dir. 이제 Boring_file.RData 및 dir/another_dir/boring_dir.

나는 노력했다

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/***" \
--exclude="*.RData" \
--exclude="boring_dir/" \
--exclude="*/*" 1_counts/* .

이것은 작동하지 않습니다. 모든 것이 여전히 포함되어 있습니다. 경로와 관련이 있다고 생각해서 저도 시도해 보았습니다.

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/***" \
--exclude="dir/another_dir/*.RData" \
--exclude="dir/another_dir/boring_dir/" \
--exclude="*/*" 1_counts/* .

아니요. 옵션이 부족하고 이 중 일부가 작동하는 이유가 무엇인지 혼란스럽습니다...

이에 대한 의견을 보내주시면 정말 감사하겠습니다.

답변1

이 시점에서 솔루션에 매우 가까워졌습니다.

rsync -r -v --dry-run --include="dir/" \
--include="dir/another_dir/***" \
--exclude="*.RData" \
--exclude="boring_dir/" \
--exclude="*/*" 1_counts/* .

내용은 이렇습니다rsync 첫 번째 일치 패턴 사용이므로 아래의 모든 내용을 포함하면 another_dir지루한 콘텐츠와 .RData 파일을 효과적으로 포함할 수 있습니다. 필터 규칙의 순서를 변경하면 됩니다.

rsync -r -v --dry-run --include="dir/" \
--exclude="*.RData" \
--exclude="boring_dir/" \
--include="dir/another_dir/***" \
--exclude="*/*" 1_counts/* .

순서가 중요하기 때문에사람들은 확장자별로 파일을 제외하도록 처음부터 규칙을 만듭니다., 그리고마지막으로 모든 규칙을 제외합니다..

관련 정보