Linux tar-Befehl: ein Verzeichnis komprimieren, aber ohne Unterverzeichnisse
-
20-08-2019 - |
Frage
Szenario: Ich habe ein Verzeichnis auf einem Server, auf meine Website hostet, die Hunderte von Benutzern übermittelten Bilder enthält. Ich erstelle ein Backup-Skript, das alle Bilder aus dem Verzeichnis nimmt und komprimiert sie in eine tar.gz-Datei. 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 tmp / genannt. Wenn ich den Befehl ausführen, erhalte ich eine tar.gz-Datei in dem Pfad alle das Bild enthalten ist / zu / images / Verzeichnis und ein Unterverzeichnis tmp / genannt.
. Frage: Wie kann ich den Befehl erhalten, das tmp / Unterverzeichnis in der tar.gz-Datei überspringen / nicht enthält
Dank einer Million im Voraus.
Lösung
Sie suchen nach dem --exclude
Argumente.
--exclude=PATTERN
Einige Benutzer finden exclude
Optionen verwirrend. Hier sind einige typische Fehler:
-
Der Haupt Betriebsart
tar
wirken sich nicht auf einen Pfadnamen explizit auf der Kommandozeile angezeigt, wenn einer ihrer Dateinamen Komponenten ausgeschlossen. In dem obigen Beispiel erstellen, wenn Sie eine Archiv- und Ausschließen von Dateien, die mit*.o
beenden, aber explizit nennen die Dateidir.o/foo
nachdem alle Optionen aufgelistet wurden,dir.o/foo
wird aus dem Archiv ausgeschlossen werden. -
Sie können manchmal die Bedeutung von
--exclude=PATTERN
verwirren und--exclude-from=FILE-OF-PATTERNS
(-X FILE-OF-PATTERNS
). Sein Achtung: Verwendung--exclude=PATTERN
wenn Dateien ausgeschlossen werden sollen als ein Muster auf der Befehlszeile angegeben. Verwenden--exclude-from=FILE-OF-PATTERNS
den Namen einer Datei einführen Welche enthält eine Liste von Mustern, eine pro Zeile; jedes von diesen Muster können Null, eine oder mehrere Dateien ausschließen. -
Wenn Sie
--exclude=PATTERN
benutzen, müssen Sie das Muster zitieren Parameter, so GNUtar
sieht Wildcard-Zeichen wie*
. Wenn du dies nicht tun, könnte die Shell erweitert die*
selbst Dateien mit bei der Hand, könnte sotar
eine Liste von Dateien erhalten statt einer Muster, oder gar nicht, so dass der Befehl etwas illegal. Dies könnte nicht dem entsprechen, was Sie wollen.
Zum Beispiel schreiben:
$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY
statt:
$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
- Sie müssen verwenden Shell-Syntax oder Globbing, anstatt
regexp
verwenden Syntax, wenn Optionen intar
ausschließen verwenden. Wenn Sie versuchen, zu verwenden,regexp
Syntaxdateien zu beschreiben ausgeschlossen werden, Ihr Befehl scheitern könnte.
Andere Tipps
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/
Das sollte funktionieren (GNU tar vorausgesetzt):
tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/