Wie verwende ich tar, um alle Dateien eines bestimmten Verzeichnisses auszuschließen?


11

Ein Client lädt Dateien auf einen Entwicklungsserver hoch. Wenn es Zeit ist, das Projekt auf einen Produktionsserver hochzuladen, werden diese Dateien nicht mehr benötigt, und wir möchten sie aus der TAR-Datei ausschließen, die wir schließlich in die Produktion übertragen werden. Wir möchten das Verzeichnis jedoch weiterhin auf dem neuesten Stand halten. Es werden nur die Dateien nicht benötigt

Mit Ubuntu 16 und tar 1.28 haben wir versucht:

tar -vczf archive.tar.gz . --exclude=wp-content/uploads/wpallimport/files/*
tar: Cowardly refusing to create an empty archive

Wir haben auch versucht, den Parameter exclude = in einfache und doppelte Anführungszeichen zu setzen, kein Glück.

tar -vczf archive.tar.gz . --exclude='wp-content/uploads/wpallimport/files/*'
tar: Cowardly refusing to create an empty archive

Die offizielle Website zeigt - ohne Gleichheitszeichen ausschließen

tar -vczf file.tar.gz --exclude 'directory/*' . und gibt den gleichen Fehler.

Wie wird das gemacht?


1
Der erste ist ein falscher Befehl. Es fehlt ein Ziel und das "." muss am Ende gehen. Der zweite ist falsch: Es fehlt ein =nach dem Ausschluss.
Rinzwind

1
"das funktioniert auch nicht" - sei genau: was passiert?
Steeldriver

Antworten:


17

Das übliche Gotcha mit tar's --excludeOption ist, dass es relativ zu dem Verzeichnisargument ist , das z. B. angegeben ist

$ tree dir
dir
└── subdir
    └── subsubdir
        ├── file1
        ├── file2
        └── file3

2 directories, 3 files

dann

$ tar cvf dir.tar.gz --exclude='/dir/subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/
dir/subdir/subsubdir/file1
dir/subdir/subsubdir/file2
dir/subdir/subsubdir/file3

schließt den Inhalt von nicht aus subsubdir(es wird versucht auszuschließen dir/dir/subdir/subsubdir/*, was mit nichts übereinstimmt); was du willst ist

$ tar cvf dir.tar.gz --exclude='subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/

AFAIK die Reihenfolge spielt keine Rolle, außer dass die Ausgabedatei sofort der fOption folgen muss .


1
Für mich funktionierte dies, als ich die Anführungszeichen um das ausgeschlossene Verzeichnis ( --exclude=subdir/subsubdir/*)
wegließ

3

Angenommen, Sie haben ein Verzeichnis mit dem Namen "top-dir" mit den Unterordnern "dir / subdir". Wenn Sie den Inhalt eines Verzeichnisses "dir / subdir" ausschließen möchten, aber nicht das Verzeichnis selbst, lautet die tatsächlich funktionierende Befehlszeile tar -zcp --exclude='dir/subdir/*' -f archive.tgz top-dir.

Sie müssen den -fSchalter nach dem --excludeeinen und vor dem Namen der Archivdatei verwenden.


So albern, es hat so lange gedauert, dies auf dem Mac herauszufinden. Ausschließen sollte vor -f tar -zcv --exclude = '. git' -f project.tar.gz project /
kisna

1

Erfolgsfall:

  1. Wenn Sie den vollständigen Pfad für die Sicherung angeben, sollte in exclude auch der vollständige Pfad verwendet werden.

    tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude = '/ opt / ABC / csv / ' --exclude = '/ opt / ABC / log / ' / opt / ABC

  2. Wenn Sie den aktuellen Pfad für die Sicherung angeben, sollte in exclude auch nur der aktuelle Pfad verwendet werden.

    tar -zcvf backup_27032020.tar.gz --exclude = 'ABC / csv / ' --exclude = 'ABC / log / ' ABC

Fehlerfall:

  1. Wenn Sie das Verzeichnis "currentpath" für die Sicherung und den vollständigen Pfad für die Ignorierung angeben, funktioniert dies nicht

    tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude='/opt/ABC/csv/*' --exclude='/opt/ABC/log/*' ABC
    

Hinweis: Das Erwähnen von Ausschluss vor / nach dem Sicherungsverzeichnis ist in Ordnung.

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.