2009-06-27 15 views
5

Szenario: Ich habe ein Verzeichnis auf einem Server, der meine Website hostet, die Hunderte von Benutzern enthält Bilder enthält. Ich erstelle ein Backup-Skript, das alle Bilder aus dem Verzeichnis übernimmt und sie in eine .tar.gz-Datei komprimiert. Der Befehl, den ich bisher habe, ist:

tar -czpf /path/to/backups/my_backup.tar.gz path/to/images/

Problem: Nein in meinem path/to/images/Ich habe ein Verzeichnis namens tmp /. Wenn ich den Befehl ausführe, erhalte ich eine .tar.gz-Datei, die das gesamte Bild im Verzeichnis path/to/images/und ein Unterverzeichnis namens tmp/enthält.

Frage: Wie bekomme ich den Befehl zu überspringen/nicht enthalten die Tmp/Unterverzeichnis in der. TAR.GZ-Datei.Linux-tar-Befehl: Komprimieren eines Verzeichnisses, aber keine Unterverzeichnisse

Vielen Dank im Voraus.

Antwort

12

Sie sind für das --exclude Argument suchen.

--exclude=PATTERN 

Einige Benutzer finden exclude Optionen verwirrend. Hier sind einige häufige Fehlerquellen:

  • Der Haupt Betriebsart tar nicht auf einen Pfadnamen wirkt explizit aufgeführt auf der Kommandozeile, wenn eines seiner Dateinamen Komponenten ausgeschlossen. Wenn Sie im obigen Beispiel ein Archiv erstellen und Dateien ausschließen, die mit *.o enden, aber die Datei die Datei dir.o/foo explizit nennen, nachdem alle Optionen aufgelistet wurden, wird dir.o/foo aus dem Archiv ausgeschlossen.

  • Sie können manchmal die Bedeutung von --exclude=PATTERN und --exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS) verwechseln. Seien Sie vorsichtig: Verwenden Sie --exclude=PATTERN, wenn Dateien ausgeschlossen werden als Muster in der Befehlszeile angegeben. Verwenden Sie --exclude-from=FILE-OF-PATTERNS, um den Namen einer Datei einzuführen, die eine Liste von Mustern enthält, eines pro Zeile; Jedes dieser Muster kann null, eine oder viele Dateien ausschließen.

  • Wenn Sie --exclude=PATTERN verwenden, sollten Sie die PATTERN Parameter zu zitieren, so GNU tar wie * Platzhalter sieht. Wenn Sie dies nicht tun, kann die Shell die * selbst mit Dateien zur Hand erweitern, so tar möglicherweise eine Liste von Dateien anstelle von einem Muster oder gar keine, wodurch der Befehl etwas illegal. Dies entspricht möglicherweise nicht dem, was Sie wollen.

Zum Beispiel schreiben:

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

statt:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY 
  • Sie verwenden Shell-Syntax verwenden müssen, oder Globbing, anstatt regexp Syntax, wenn ausschließen Verwendung Optionen in tar. Wenn Sie versuchen, die Syntax regexp zu verwenden, um auszuschließende Dateien zu beschreiben, schlägt Ihr Befehl möglicherweise fehl.
+0

Vielen Dank für die Antwort. Sie haben sehr Recht, dass --exclude kann ein bisschen verwirrend sein. Ich habe es nicht 100% verstanden, bis ich deine Erklärungen gelesen habe. Vielen Dank – VinkoCM

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

Dies sollte funktionieren (GNU tar vorausgesetzt):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/ 
Verwandte Themen