
Für ein NLP-Projekt benötige ich eine Kopie der Project Gutenberg-Bibliothek. Das Projekt erlaubt zwar den Download der Dateien, insbesondere zu Spiegelungszwecken (ich plane, irgendwann eine einzurichten), aber für meine Arbeit benötige ich nur eine bestimmte Teilmenge der vorhandenen Dateien.
Die Verzeichnisse an der Quelle sind folgendermaßen organisiert:
|
| - 1 - |
| |- 1
| |- 2
| |...
| - 2
| .
| .
| .
| - 9
| - cache
| - retired
| ...
Die einzigen Verzeichnisse, die mich interessieren, sind die nummerierten, und der einzige Dateityp, der mich interessiert, ist . .txt
Ich möchte auch keine Dateien, die mit -8.txt
oder enden -h.txt
, bin aber bereit, sie vorerst zu tolerieren.
Bisher habe ich versucht:
--include "*/" --include "*.txt" --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*-8.txt" --exclude "*"
<- dieser zieht noch den "cache" Ordner mit ein, da dieser auch einige.txt
Dateien enthält--include "*/" --include "*.txt" -f'- *\-8.txt' -f'- *\-h.txt' -f'- cache/**' --exclude "cache" --exclude "images" --exclude "retired" --exclude "pg" --exclude "*"
<- mehr oder weniger das Gleiche
Das Problem scheint folgendes zu sein:
- Ich muss ausschließenalles, da ich nur eine sehr begrenzte Anzahl an Dingen benötige
- Ich füge die nummerierten Verzeichnisse hinzu, da das alles ist, was ich brauche
- Durch das Einschließen
*.txt
werden die vorherigen Ausschlüsse aufgehoben, da andere Verzeichnisse auch Textdateien enthalten.
Wie würde ich dabei vorgehen?
Antwort1
Aus dem Beitrag rsync - alle Verzeichnisse außer einigen wenigen ausschließen, ich zitiere aus dem Antwort von Darryl E. Clarke:
Ein einfacher Filter sollte genügen. Um die vorherige Antwort mit einem passenden Beispiel zu ergänzen: Schließen Sie explizit die übergeordneten Elemente sowie alle (**) Unterordner und Dateien ein. Schließen Sie dann alles andere aus. Hier ist
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/
Hätte zur Folge:
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)
Fügen Sie hierzu Ihren Filter von hinzu *.txt
.
Mit anderen Worten: Erst einschließen, dann alles ausschließen.
Antwort2
Sie können die nummerierten Verzeichnisse explizit mit dem Glob abgleichen [0-9]/
:
-f'+ [0-9]/' \
-f'- *-[8h].txt' \
-f'+ *.txt' \
-f'- *' \
Wenn die Zahlen über 9 hinausgehen, würde möglicherweise auch die Hinzufügung von -f'+ [0-9][0-9]/
oder -f'+ [0-9]*/
ausreichen.