Comando tar di Linux:comprimendo una directory ma escludendo le sottodirectory
-
20-08-2019 - |
Domanda
Scenario: Ho una directory su un server che ospita il mio sito Web che contiene centinaia di immagini inviate dagli utenti.Sto creando uno script di backup che prende tutte le immagini dalla directory e le comprime in un unico file .tar.gz.Il comando che ho finora è:
tar -czpf /percorso/delle/backup/mio_backup.tar.gz percorso/delle/immagini/
Problema: No, all'interno del mio percorso/a/immagini/ ho una directory chiamata tmp/.Quando eseguo il comando, ottengo un file .tar.gz contenente tutte le immagini nella directory path/to/images/ e una sottodirectory chiamata tmp/.
Domanda: Come posso ottenere il comando per saltare/non includere la sottodirectory tmp/ nel file .tar.gz.
Grazie mille in anticipo.
Soluzione
Stai cercando il --exclude
discussione.
--exclude=PATTERN
Alcuni utenti trovano exclude
opzioni confuse.Ecco alcune trappole comuni:
La modalità operativa principale di
tar
Non agisce su un nome percorso esplicitamente elencato nella riga di comando se uno dei suoi componenti del nome del file è escluso.Nell'esempio precedente, se si crea un oggetto Archiviare ed escludere i file che terminano con*.o
, ma il nome esplicito Il filedir.o/foo
dopo che tutte le opzioni sono state elencate,dir.o/foo
verranno esclusi dall'archivio.A volte puoi confondere i significati di
--exclude=PATTERN
E--exclude-from=FILE-OF-PATTERNS
(-X FILE-OF-PATTERNS
).Essere attento:utilizzo--exclude=PATTERN
quando i file da escludere sono dato come modello sulla riga di comando.Utilizzo--exclude-from=FILE-OF-PATTERNS
Per introdurre il nome di un file che contiene un elenco di modelli, uno per riga;Ognuno di questi I modelli possono escludere zero, uno o molti file.Quando usi
--exclude=PATTERN
, assicurati di citare il MODELLO parametro, quindi GNUtar
vede i caratteri jolly come*
.Se si desidera non farlo, la shell potrebbe espandere il file*
stesso utilizzando i file a portata di mano, quinditar
potrebbe ricevere un elenco di file invece di uno modello, o nessuno, rendendo il comando in qualche modo illegale.Questo potrebbe non corrispondere a ciò che desideri.
Ad esempio, scrivi:
$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY
piuttosto che:
$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
- È necessario utilizzare la sintassi della shell o il globbing anziché
regexp
sintassi, quando si utilizzano le opzioni di esclusione intar
.Se provi a usareregexp
Sintassi per descrivere i file da escludere, il comando potrebbe fallire.
Altri suggerimenti
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/
Dovrebbe funzionare (supponendo tar GNU):
tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/