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 rsync
regole del filtro:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Consulta la rsync
pagina 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 --parents
conserva 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 -e
switch definisce il rsync
protocollo 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!