2012-05-09 18 views
19

Sto usando tar per fare backup giornalieri di un server e voglio evitare il backup delle directory di sistema/proc e/sys, ma senza escludere nessuna directory chiamata "proc" o "sys "da qualche altra parte nell'albero dei file.tar esclude singoli file/directory, non modelli

Per esempio, avente la seguente struttura di directory ("bla" essere file normali):

# find 
. 
./sys 
./sys/bla 
./foo 
./foo/sys 
./foo/sys/bla 

Vorrei escludere ./sys ma non./foo/sys.

io non riesco a trovare un modello di --exclude che lo fa ...

# tar cvf /dev/null * --exclude=sys 
foo/ 

o ...

# tar cvf /dev/null * --exclude=/sys 
foo/ 
foo/sys/ 
foo/sys/bla 
sys/ 
sys/bla 

Tutte le idee? (Linux Debian 6)

+0

Sei sicuro che non ci sono esclusioni? Se stai usando MAC OS è una storia diversa! Guarda [qui] (http://www.gnu.org/software/tar/manual/html_node/exclude.html#SEC108) – drinchev

+0

Non sono sicuro di aver capito la tua domanda. Esiste un'opzione '--exclude', ma non so come abbinarla per nomi di file singoli, assoluti (non tutti i file con quel nome) - guarda i miei esempi sopra. –

+0

Guarda qui: http://stackoverflow.com/questions/984204/shell-command-to-tar-directory-excluding-certain-files-folders – paulsm4

risposta

8

È possibile specificare percorsi assoluti al modello di escludere, in questo modo altri sys o proc directory saranno archiviati:

tar --exclude=/sys --exclude=/proc/
+2

Vero, ma il dettaglio importante su questo è che il nome del file escluso deve corrispondere esattamente la notazione riportata dall'elenco 'tar'. Per il mio esempio sarebbe './Sys' - come ho appena scoperto ora. –

5

Usando tar è possibile escludere directory inserendo un file di tag in qualsiasi directory che dovrebbe essere saltata.

Crea file di tag,

touch /sys/.exclude_from_backup 
touch /proc/.exclude_from_backup 

Poi,

tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup * 
+2

Buona idea in teoria ma spesso/sys e/proc non possono essere scritti su. – pjv

6

In questo caso si potrebbe desiderare di utilizzare:

--anchored --exclude=sys/\* 

perché nel caso in cui il tar non mostra il leader "/" hai un problema con il filtro.

+0

Questo ha fatto il trucco per me, grazie! Volevo escludere una directory specifica, non tutte le directory/sottodirectory corrispondenti al modello. bsdtar non ha però l'opzione "--anchored", e con bsdtar possiamo usare percorsi completi per escludere cartelle specifiche. –

+3

ah l'ho trovato! in bsdtar l'ancora è "^": 'bsdtar cvjf test.tar.bz2 --exclude myfile.avi --exclude"^myexcludedfolder "*' –

Problemi correlati