5 Stimmen

Linux tar-Befehl: Ein Verzeichnis komprimieren, aber Unterverzeichnisse ausschließen

Szenario: Ich habe ein Verzeichnis auf einem Server, auf dem meine Website gehostet wird, das Hunderte von benutzerbereitgestellten Bildern enthält. Ich erstelle ein Backup-Skript, das alle Bilder aus dem Verzeichnis nimmt und sie in eine .tar.gz-Datei komprimiert. Der Befehl, den ich bisher habe, ist:

tar -czpf /Pfad/zum/Backups/mein_backup.tar.gz Pfad/zu/Bildern/

Problem: In meinem Pfad/zu/Bildern/ habe ich ein Verzeichnis namens tmp/. Wenn ich den Befehl ausführe, erhalte ich eine .tar.gz-Datei, die alle Bilder im Verzeichnis Pfad/zu/Bildern/ und ein Unterverzeichnis namens tmp/ enthält.

Frage: Wie kann ich den Befehl so ändern, dass das tmp/ Unterverzeichnis nicht in der .tar.gz-Datei enthalten ist.

Vielen Dank im Voraus.

12voto

jason Punkte 8848

Sie suchen nach dem --exclude-Argument.

--exclude=PATTERN

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

  • Der Hauptbetriebsmodus von tar wirkt sich nicht auf einen explizit auf der Befehlszeile aufgeführten Dateipfad aus, wenn eines seiner Dateinamenkomponenten ausgeschlossen ist. Im obigen Beispiel wird, wenn Sie ein Archiv erstellen und Dateien ausschließen, die mit *.o enden, aber die Datei dir.o/foo explizit angeben, nachdem alle Optionen aufgelistet wurden, dir.o/foo aus dem Archiv ausgeschlossen.

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

  • Wenn Sie --exclude=PATTERN verwenden, achten Sie darauf, den PATTERN-Parameter in Anführungszeichen zu setzen, damit GNU tar Platzhalterzeichen wie * erkennt. Wenn Sie dies nicht tun, könnte die Shell das * selbst anhand der vorhandenen Dateien erweitern, sodass tar möglicherweise eine Liste von Dateien anstelle eines Musters oder überhaupt nichts erhält, was den Befehl etwas ungültig macht. Dies entspricht möglicherweise nicht dem, was Sie wollen.

Zum Beispiel, schreiben Sie:

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

anstatt:

$ tar -c -f ARCHIVE.TAR --exclude *.o VERZEICHNIS
  • Sie müssen Shell-Syntax oder Globbing verwenden, anstatt Reguläre Ausdrücke, wenn Sie ausschließende Optionen in tar verwenden. Wenn Sie versuchen, Reguläre Ausdrücke zu verwenden, um die auszuschließenden Dateien zu beschreiben, könnte Ihr Befehl fehlschlagen.

3voto

chaos Punkte 118918
tar -czpf /pfad/zu/sicherungen/mein_backup.tar.gz --exclude pfad/zu/images/tmp pfad/zu/images/

0voto

legoscia Punkte 38918

Dies sollte funktionieren (vorausgesetzt, GNU tar wird verwendet):

tar -czpf /pfad/zur/sicherungen/mein_backup.tar.gz --exclude=tmp pfad/zu/bildern/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X