
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]*/
것입니다.