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?



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" 

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/ 

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


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

3

Versuche dies

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

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>

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.


2

Das hat bei mir funktioniert:

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

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.

-2

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

--exclude=/home/user/public_html/tmp

1
"ist erforderlich, wenn der Ordner Platz im Namen hat
Black
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.