Warum erstellt tar --exclude = ". *" Ein leeres Archiv?


7

Alles, was ich lese, besagt, dass zum Ausschließen .svnund .htaccessanderer versteckter Dateien beim Erstellen eines Teerarchivs das --exclude=".*"Muster verwendet werden soll.

Wenn ich es versuche, bekomme ich ein leeres Archiv. Wenn ich die --excludelange Option weglasse, wird alles archiviert.

Hier ist der vollständige Befehl, den ich verwende:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".*" ./*

Ich habe auch diese Variante ausprobiert, ohne Unterschiede in den Ergebnissen:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".?*" ./*

Weil du es ausschließen willst .und alles durch es erreichbar ist ...
vonbrand

Antworten:


6

Sie scheinen GNU zu verwenden tar. Der Mustervergleich in GNU tarfunktioniert auf dem gesamten Pfad und hört nicht bei /Zeichen auf. Da Sie ./für Ihre Dateiliste verwenden, bedeutet dies, dass jede einzelne Datei übereinstimmt, ./*die auch übereinstimmt .?*. Ich würde --exclude='.[^/]*'vielleicht so etwas versuchen .


Ändern Sie meinen Befehl, um tar -czvf ../_migrate/archive_2012-05-07.tgz exclude=".*" *das Problem basierend auf Ihrer Antwort zu beheben. Ich bin überrascht, dass es einen Unterschied macht, da es in meinen Gedanken *dasselbe ist wie ./*, aber anscheinend wird das '. /' Zum tarPfad hinzugefügt und so fällt alles unter das Muster. Um ganz klar zu sein, das Ausschlussmuster war in Ordnung, es ist das Dateilistenmuster, das das Problem verursacht hat.
Tom Auger

10

Ihr Muster schließt "." Aus. Dies ist das Verzeichnis, das Sie archivieren möchten. Verwenden Sie stattdessen ".? *" Als Muster.


Ich habe das herausgefunden und versucht, das Muster ".? *" Zu verwenden, was zu den gleichen Ergebnissen führte. Aber Sie haben mich ermutigt, es noch einmal zu versuchen. Ich werde bestätigen.
Tom Auger

Ich kann bestätigen, dass --exclude = ".? *" In meinem Fall nicht anders ist als ". *".
Tom Auger

In der Tat interessant. Ich habe unter Mac OS Lion getestet. tar --version ergibt "bsdtar 2.8.3 - libarchive 2.8.3". ".? *" funktioniert mit diesem Teer.
Kyle Jones

Klingt so, als ob der GNU-Teer entweder den Mustervergleich oder die Interpretation der Dateiliste ein wenig anders behandelt als bsdtar ...
Tom Auger

3

.*wird immer mit jeder Datei übereinstimmen, die enthalten sein würde, da Sie Dateien von verwenden .(die sogar für sich selbst übereinstimmen .*).

Sie müssen nichts tun, um die von Ihnen erwähnten Dateien auszuschließen. Sie werden ohnehin nicht vom Glob abgeglichen. Der *Glob stimmt nicht mit Dateien mit Punktpräfix überein, es sei denn, Sie aktivieren diese Funktionalität manuell (durch dotgloboder das Äquivalent Ihrer Shell).


Sie sind nicht ganz richtig im Punktteil, obwohl *versteckte Dateien nicht übereinstimmen, es dotglobsei denn, dies ist festgelegt. Unterverzeichnisse können dennoch versteckte Dateien enthalten, die glücklich geteert werden, wenn keine Ausschlussregel verwendet wird.
Lekensteyn

Ah! Das hatte ich zwar nicht bedacht.
Chris Down
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.