2009-06-27 26 views
5

Scenario: Ho una directory su un server che ospita il mio sito Web che contiene centinaia di immagini inviate dall'utente. 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 è:

catrame -czpf percorso /path/to/backups/my_backup.tar.gz/A/immagini/

Problema: No dentro la mia path/to/images/Ho una directory chiamata tmp /. Quando eseguo il comando, ottengo un file .tar.gz contenente tutta l'immagine nella directory path/to/images/e una sottodirectory chiamata tmp /.
Domanda: Come posso ottenere il comando per saltare/non includere la directory tmp/sottodirectory nel file .tar.gz.Comando tar Linux: comprime una directory ma esclude sottodirectory

Grazie mille in anticipo.

risposta

12

Stai cercando l'argomento --exclude.

--exclude=PATTERN 

Alcuni utenti trovano le opzioni exclude confuse. Ecco alcuni errori comuni:

  • La modalità operativa principale del tar non agisce su un nome del percorso esplicitamente elencati sulla riga di comando se uno del suo nome file viene escluso componenti. Nell'esempio sopra, se si crea un archivio ed escludi i file che terminano con *.o, ma si specifica esplicitamente il nome dir.o/foo dopo aver elencato tutte le opzioni, dir.o/foo verrà escluso dall'archivio.

  • a volte si può confondere i significati di --exclude=PATTERN e --exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS). Sii prudente : usa --exclude=PATTERN quando i file da escludere sono dato come modello sulla riga di comando. Utilizzare --exclude-from=FILE-OF-PATTERNS per introdurre il nome di un file che contiene un elenco di motivi, uno per riga; ognuno di questi modelli può escludere zero, uno o più file.

  • Quando si utilizza --exclude=PATTERN, è assolutamente necessario indicare il parametro PATTERN , quindi GNU tar vede i caratteri jolly come *. Se non lo fai, la shell potrebbe espandere lo * stesso usando i file a portata di mano, quindi tar potrebbe ricevere un elenco di file invece di uno schema o nessuno, rendendo il comando un po 'illegale. Questo potrebbe non corrispondere a quello che desideri.

Ad esempio, scrivere:

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY 

piuttosto che:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY 
  • È necessario utilizzare la sintassi shell uso, o globbing, piuttosto che regexp sintassi, quando si utilizza esclude opzioni in tar. Se si tenta di utilizzare la sintassi regexp per descrivere i file da escludere, il comando potrebbe non riuscire.
+0

Grazie per la risposta. Hai ragione nel dire che --exclude può essere un po 'confuso. Non l'ho capito al 100% fino a quando non ho letto le tue spiegazioni. Grazie – VinkoCM

3
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/ 
0

questo dovrebbe funzionare (assumendo GNU tar):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/ 
Problemi correlati