Risposte:
Il motivo per cui il tuo comando non funziona è spiegato dalla pagina di manuale di rsync (enfasi aggiunta):
--Elimina
Questo dice a rsync di eliminare i file estranei dal lato di ricezione (quelli che non si trovano sul lato di invio), ma solo per le directory che vengono sincronizzate. È necessario aver chiesto a rsync di inviare l'intera directory (ad esempio "dir" o "dir /") senza utilizzare un carattere jolly per il contenuto della directory (ad esempio "dir / *") poiché il carattere jolly viene espanso dalla shell e rsync ottiene quindi un richiesta di trasferire singoli file, non la directory principale dei file. I file esclusi dal trasferimento sono anche esclusi dall'eliminazione, a meno che non si usi l'opzione --delete-excluded o si contrassegni le regole come corrispondenti solo sul lato di invio (vedere i modificatori di inclusione / esclusione nella sezione REGOLE DI FILTRO).
Quindi, quando corri
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
i file indesiderati in DEST non vengono eliminati perché in realtà non hai richiesto la sincronizzazione di una directory, ma solo una manciata di file specifici. Per ottenere i risultati desiderati, prova qualcosa del genere:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Si noti che l'ordine delle direttive include e exclude. In sostanza, ogni file viene verificato rispetto ai modelli di inclusione o esclusione nell'ordine in cui vengono visualizzati. Pertanto, i file con estensione .jpg o .txt vengono sincronizzati poiché corrispondono ai modelli "inclusi" prima che corrispondano al modello "*" escluso. Tutto il resto è escluso dal --exclude '*'
modello. L' --delete-excluded
opzione garantisce che anche i file esclusi sul lato DEST vengano eliminati.
--delete-excluded
. Senza di essa, solo *.jpg
e *.txt
può essere eliminato sul lato destinazione. Con esso, anche i file non correlati verranno eliminati. Potresti essere interessato a questo tutorial sui filtri rsync .