Ausschluss des Verzeichnisses beim Erstellen einer .tar.gz-Datei

119

Ich habe einen /public_html/Ordner, in diesem Ordner befindet sich ein /tmp/Ordner mit etwa 70 GB Dateien, die ich nicht wirklich brauche.

Jetzt versuche ich , eine zu schaffen , .tar.gzder /public_html/ohne/tmp/

Dies ist der Befehl, den ich ausgeführt habe:

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/" 

Der Teer wird noch erstellt, und wenn ich einen mache, ls -shkann ich sehen, dass er MyBackup.tar.gzbereits ungefähr 30 GB hat, und ich weiß mit Sicherheit, dass /public_html/ohne /tmp/nicht mehr als 1 GB Dateien vorhanden sind.

Was habe ich falsch gemacht?

suresh
quelle
Die -pOption hat keine Bedeutung in Bezug auf die Erstellungsfunktion, oder?
Martin Schneider

Antworten:

201

Versuchen Sie, das letzte / am Ende des Verzeichnispfads zu entfernen, um es auszuschließen

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 
Victor Parmar
quelle
7
So schließen Sie den gesamten Ordner und seinen Inhalt aus: tar -pczvf MyBackup.tar.gz / home / user / public_html / --exclude "/ home / user / public_html / tmp / *"
Dr.jacky
Ich bekomme tar: Error exit delayed from previous errors.in
Macos
Erhalten eines Fehler-Teers: Entfernen des führenden "/" aus den Mitgliedsnamen
SenG
2
Funktioniert nicht, ich musste --exclude="/home/user/public_html/tmpstatt--exclude "/home/user/public_html/tmp
Black
1
Ignorieren Sie meinen vorherigen Kommentar, den ich nicht mehr bearbeiten kann: Er excludemuss zuerst als stackoverflow.com/users/3904223/oussaka Notizen angegeben werden. Zumindest ist das das einzige, was für mich funktioniert hat
kghbln
46

Versuchen Sie, das --excludenach vor dem Include zu verschieben.

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 
Martin Algesten
quelle
Danke, das hat bei mir auf einer alten Ubuntu 14.04 LTS Box funktioniert.
Jamsi
1
Ich musste dies auch unter OS X tun.
TheJacobTaylor
16

Ja, entfernen Sie das nachfolgende /und (zumindest in Ubuntu 11.04) alle angegebenen Pfade müssen relative oder vollständige Pfade sein. Sie können absolute und relative Pfade nicht im selben Befehl mischen.

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "home/user/start-directory/logs"

schließt das Protokollverzeichnis aber nicht aus

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "./start-directory/logs"

wird funktionieren

Benutzer
quelle
1
Arbeite für mich, wenn ich den absoluten Pfad im Ausschlussargument entferne.
Jruzafa
2
Der Tipp zum Mischen von absoluten und relativen Pfaden war hier der Schlüssel für mich
Dmitri DB
12

Der richtige Befehl zum Ausschließen des Verzeichnisses von der Komprimierung lautet:

tar --exclude='./folder' --exclude='./upload/folder2' -zcvf backup.tar.gz backup/

Stellen Sie sicher, dass --exclude vor den Quell- und Zielelementen steht .

und Sie können den Inhalt der tar.gz-Datei überprüfen, ohne sie zu entpacken:

tar -tf backup.tar.gz
Oussaka
quelle
3

Versuche dies

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp
Yogesh
quelle
2

Sie können auch mehrere mit nur einem ausschließen --exclude. Wie dieses Beispiel:

tar -pczf MyBackup.tar.gz --exclude={"/home/user/public_html/tmp","/home/user/public_html/data"} /home/user/public_html/

In --exclude=müssen Sie den Verzeichnisnamen ohne /und zwischen MyBackup.tar.gz und / home / user / public_html / beenden

Die Syntax lautet:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>
LozanoMatheus
quelle
2

Die akzeptierte Antwort funktionierte bei mir nicht, da unter Windows 10 unxutils tar ausgeführt wurde. Stattdessen musste ich die Dateien / Verzeichnisse als letzten Parameter wie folgt archivieren :

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/

Dann hat es funktioniert.

user2081279
quelle
2

Das hat bei mir funktioniert:

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"
Schwarz
quelle
2

tar -pczf <target_file.tar.gz> --exclude /path/to/exclude --exclude /another/path/to/exclude/* /path/to/include/ /another/path/to/include/*

Getestet in Ubuntu 19.10.

  1. Das =Nachher excludeist optional. Sie können =anstelle des Leerzeichens nach dem Schlüsselwort verwenden, excludewenn Sie möchten.
  2. Der Parameter excludemuss vor der Quelle stehen.
  3. Der Unterschied zwischen dem Namen des verwendeten Ordners (wie dem ersten) und dem * (wie dem zweiten) besteht darin, dass der zweite einen leeren Ordner in das Paket enthält, der erste jedoch nicht.
scegg
quelle
-2

Die Ausschlussoption muss das =Zeichen enthalten und "ist nicht erforderlich.

--exclude=/home/user/public_html/tmp
Ivan Avery Frey
quelle
1
"ist erforderlich, wenn der Ordner Platz im Namen hat
Black