GNU/Linux >> Linux Esercitazione >  >> Linux

Rsync, includi solo alcuni tipi di file escluse alcune directory?

Voglio sincronizzare solo alcuni tipi di file (ad es. .py ) e voglio escludere i file in alcune directory (ad es. venv ).

Questo è quello che ho provato:

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

Ma non funziona.

Cosa mi sto perdendo?

Ho anche seguito la risposta a questa domanda ma non ha aiutato.

Risposta accettata:

venv/ deve essere escluso prima */ è incluso:

rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

La sottigliezza è che rsync elabora le regole in ordine e vince la prima regola corrispondente. Quindi, se --include='*/' è prima di --exclude='venv/' , quindi la directory venv/ è incluso da --include='*/' e la regola di esclusione non viene mai consultata.

Potremmo semplificarlo?

Perché abbiamo bisogno di --include='*/' e --exclude='*' ? Perché non è --exclude=venv/ --include='*.py' sufficiente?

L'impostazione predefinita è includere file/directory. Quindi, considera:

rsync -avz --exclude='venv/' --include='*.py' source target

Ciò includerebbe tutto tranne i file o le directory in venv/ . Tuttavia, vuoi solo .py File. Ciò significa che dobbiamo escludere esplicitamente altri file con --exclude='*' .

--exclude='*' esclude entrambi file e directory. Quindi, se specifichiamo --exclude='*' , verranno escluse tutte le directory e solo .py file che la directory principale verrebbe trovata. .py i file nelle sottodirectory non sarebbero mai stati trovati perché rsync non esamina le directory escluse. Quindi, se abbiamo --exclude='*' , dobbiamo precederlo con --include='*/' per garantire che i contenuti di tutte le directory vengano esplorati.


Linux
  1. Come eseguire il tar (comprimere) i file, escludendo determinati file o directory

  2. Confronta le directory ma non il contenuto dei file?

  3. Come copiare le directory in modo ricorsivo utilizzando rsync escludendo file specifici

  4. cp solo file, saltando le directory

  5. SCP trasferisce solo i file modificati

Come utilizzare rsync per escludere file e directory nel trasferimento di dati

Come escludere file e directory con Rsync

Come eseguire il backup di file e directory utilizzando Rsync in Linux

Mantenere sincronizzati file e directory Linux con rsync

Diff -r Solo per determinati tipi di file?

Trova i file e stampa solo le loro directory principali