
Для проекта по 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 "*"
<- этот все еще тянет папку "cache", так как она также содержит некоторые.txt
файлы--include "*/" --include "*.txt" -f'- *\-8.txt' -f'- *\-h.txt' -f'- cache/**' --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*"
<- более или менее одно и то же
Проблема выглядит следующим образом:
- Мне нужно исключитьвсе, так как мне нужен крайне ограниченный набор вещей
- Я включаю пронумерованные каталоги, так как это все, что мне нужно.
- Включение
*.txt
нарушает предыдущие исключения, поскольку другие каталоги также содержат текстовые файлы.
Как бы я это сделал?
решение1
Из поста rsync - исключить все каталоги, кроме нескольких, я цитирую из ответ Даррила Э. Кларка:
Простой фильтр должен сработать. Чтобы развить предыдущий ответ с надлежащим примером — явно включите родительские папки, а также все (**) подпапки и файлы. Затем исключите все остальное. Вот
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]*/
.