Voglio spostare alcuni sottogruppi di file da dirA a dirB (diciamo file con "blah" nel nome del file), ma voglio che tutte le directory nidificate siano uguali nella nuova posizione. Come lo posso fare?
Voglio spostare alcuni sottogruppi di file da dirA a dirB (diciamo file con "blah" nel nome del file), ma voglio che tutte le directory nidificate siano uguali nella nuova posizione. Come lo posso fare?
Risposte:
La magia delle rsyncregole del filtro:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Consulta la rsyncpagina man per i dettagli sulle regole di filtro, ma ecco la versione ridotta per questa particolare esigenza.
--filter="+ */" significa "includi tutto ciò che è una directory"
--filter="-! *blah* significa "escludi tutto ciò che NON include blah nel nome del file"
Se devi copiare questi file cp farà:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
L'opzione --parentsconserva i sottodirectory: crea il percorso completo della directory per la destinazione.
Questo ha funzionato per me:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/
Lo -eswitch definisce il rsyncprotocollo di trasferimento con porta come -p 22. Inoltre, le /barre finali sono importanti per far sapere al programma che ha a che fare con le directory.
Grazie @pdo per le ore extra della mia giornata di lavoro!