Come posso escludere tutte le sottodirectory ma includere i file di una directory in rsync?


13

Voglio fare il backup del mio sistema Ubuntu e ho due partizioni da curare: una è /, un'altra lo è /home.

Probabilmente vorrò fare il backup /. Questo non è nemmeno così grande, quindi posso portarlo sulla mia scheda SD, pur essendo abbastanza reattivo per farmi desiderare di averne un'immagine (ecco perché sto cercando di usare rsync in questo momento).

E a proposito /home, ha molte sottodirectory che non si preoccupano molto, quindi non farò probabilmente li comprendono, ma voglio prendere cura di file in là, ad esempio come .bash_history, .bashrc, .facee così via.

Quindi voglio escludere tutte le sottodirectory includendo i file in /home. Come posso raggiungerlo?

--exclude "*/"non funzionava. "/*/", "/**/", --include "*" --exclude */Non mi mostra quello che voglio. almeno ha copiato la cartella di origine, senza copiare nulla al suo interno.

Risposte:


17

Prova questo comando:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

La regola per includere tutti i file *ed escludere le directory*/

Un altro approccio per utilizzare la copia normale cp

cp /home/usr/* /destination

puoi eliminare gli errori relativi alle directory usando il reindirizzamento

cp /home/usr/* /destination 2>/dev/null

Questo copierà solo i file all'interno della tua casa senza le directory


/ proc ha un filesystem virtuale irreale, dovresti escluderlo dal backup, inoltre dovresti escludere / tmp e / run
Maythux

Il mio comando originale per il backup di cose era così:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Dinir

/ proc, / tmp e / run, Verifica! Ad ogni modo, come vedi nel mio commento, dovevo fare il backup dell'intero file system di root escludendo la home directory con poche eccezioni. Inserire il -f" */" -f"+ *"mio codice sarebbe sicuro? Forse sarebbe come -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir,

dovresti usarlo così-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux

ma consiglio di usare cp per la tua casa, è molto più facile
Maythux,

3

Se vuoi risolvere questo con parametri --includee --exclude, dovresti cambiarne l'ordine: prima escludi ciò che vuoi, quindi includi tutto. Lo faccio di solito con questo comando:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'

2

Per impostazione predefinita, rsyncnon copia le directory. Forse stai usando la -abandiera. Se questo è il caso, notare che secondo la pagina man , -aè equivalente a -rlptgoD, quindi se non si desidera ricorrere, basta usare -lptgoD.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.