rsync에서 특정 디렉터리와 하나의 파일 형식을 제외한 모든 디렉터리를 제외하려면 어떻게 해야 합니까?

rsync에서 특정 디렉터리와 하나의 파일 형식을 제외한 모든 디렉터리를 제외하려면 어떻게 해야 합니까?

NLP 프로젝트의 경우 Project Gutenberg 라이브러리의 복사본이 필요합니다. 이제 프로젝트에서는 특히 미러링 목적인 경우 파일 다운로드를 허용하지만(결국 설정할 계획입니다) 작업을 위해서는 존재하는 파일의 특정 하위 집합만 필요합니다.

소스의 디렉토리는 다음과 같이 구성됩니다.

|
| - 1 - |
|       |- 1
|       |- 2
|       |...
| - 2
| .
| .
| .
| - 9
| - cache
| - retired
| ...

내가 관심 있는 유일한 디렉토리는 번호가 매겨진 디렉토리이고, 내가 관심 있는 유일한 파일 형식은 입니다. 또한 또는 .txt로 끝나는 파일은 원하지 않지만 지금은 허용할 용의가 있습니다.-8.txt-h.txt

지금까지 나는 다음을 시도했습니다.

  • --include "*/" --include "*.txt" --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*-8.txt" --exclude "*".txt<- 이 폴더에는 일부 파일 도 포함되어 있으므로 여전히 "캐시" 폴더를 가져옵니다.
  • --include "*/" --include "*.txt" -f'- *\-8.txt' -f'- *\-h.txt' -f'- cache/**' --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*"<- 거의 똑같음

문제는 다음과 같은 것 같습니다.

  • 제외해야 해요모든 것, 필요한 것이 극히 제한되어 있기 때문에
  • 번호가 매겨진 디렉토리를 포함합니다. 그게 제가 필요한 전부이기 때문입니다.
  • 다른 디렉터리에도 텍스트 파일이 포함되어 있으므로 포함하면 *.txt이전 제외가 중단됩니다.

이 문제를 어떻게 해결할까요?

답변1

게시물에서 rsync - 일부 디렉토리를 제외한 모든 디렉토리 제외, 나는 다음에서 인용한다. Darryl E. Clarke의 답변:

간단한 필터를 사용하면 됩니다. 적절한 예를 사용하여 이전 답변을 작성하려면 - 상위 항목과 모든(**) 하위 폴더 및 파일을 명시적으로 포함합니다. 그런 다음 다른 모든 것을 제외하십시오. 다음은 다음과 같습니다 filter.txt.

+ /include_this_dir/
+ /include_this_dir/**
+ /include_that_dir/
+ /include_that_dir/**
- /** With the command line:

rsync -av --dry-run --filter="merge filter.txt" source_dir/ dest_dir/

결과는 다음과 같습니다.

sending incremental file list
created directory dest_dir
./
include_that_dir/
include_that_dir/somefile.txt
include_that_dir/subdir/
include_this_dir/

sent 202 bytes  received 65 bytes  534.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

여기에 필터를 추가하세요 *.txt.

즉, 먼저 포함시킨 다음 모두 제외합니다.

답변2

번호가 매겨진 디렉토리를 glob과 명시적으로 일치시킬 수 있습니다 [0-9]/.

 -f'+ [0-9]/' \
 -f'- *-[8h].txt' \
 -f'+ *.txt' \
 -f'- *' \

숫자가 9보다 높아지면 아마도 추가하거나 -f'+ [0-9][0-9]/충분할 -f'+ [0-9]*/것입니다.

관련 정보