Frage Wie kann ich ein Zip-Archiv eines ganzen Verzeichnisses über das Terminal ohne versteckte Dateien erstellen?


Ich habe ein Projekt mit vielen versteckten Ordnern / Dateien darin. Ich möchte ein Zip-Archiv davon erstellen, aber im Archiv sollten keine versteckten Ordner / Dateien sein. Wenn Dateien in einem versteckten Ordner nicht ausgeblendet sind, sollten sie auch nicht enthalten sein.

Ich weiß, dass ich ein Zip-Archiv eines solchen Verzeichnisses erstellen kann:

zip -r zipfile.zip directory

Ich weiß auch, dass ich Dateien mit der Option -x ausschließen kann, also dachte ich, das könnte funktionieren:

zip -r zipfile.zip directory -x .*

Es hat nicht funktioniert. Alle versteckten Verzeichnisse befanden sich immer noch in der Zip-Datei.


189
2017-08-27 18:01


Ursprung




Antworten:


Dies schließt auch versteckte Dateien in versteckten Verzeichnissen aus:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@

98
2017-08-27 19:27



Danke für deine Antwort. Der Befehl (find community-chess/ -path '*/.*' -prune -o -type f -print | zip ~/community-chess.zip -@) ist länger als erwartet, aber es funktioniert gut. Unterverzeichnisse sind ebenfalls enthalten, also +1 und eine akzeptierte Antwort :-) - Martin Thoma


Vor allem, wenn Sie keine Zip installiert haben, installieren Sie es zuerst wie folgt:

sudo apt-get install zip

Dann zum einfachen Erstellen einer Zip-Datei:

zip -r compressed_filename.zip foldername

Wenn Sie versteckte Dateien ausschließen möchten:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@

67
2017-08-11 06:28



Vielen Dank für Ihre Bemühungen, einem anderen Ubuntu-Benutzer zu helfen. Bitte beachten Sie, dass das erneute Angeben der akzeptierten Antwort in einer neuen Antwort nur zu dem Durcheinander beiträgt und mit einer hohen Wahrscheinlichkeit für das Entfernen markiert ist. - hmayag


Hinzufügen " zum .* (Andernfalls erweitert sich Ihre Shell .* zu den Punktdateien im aktuellen Verzeichnis) und schließt auch versteckte Dateien in Unterverzeichnissen aus:

zip -r zipfile.zip . -x ".*" -x "*/.*"

Dies führt dazu, dass Dateien mit a beginnen . nicht in Ihre Zip-Datei hinzugefügt werden.

rinzwind@discworld:~/tmp$ ls -la
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 tmp
drwxr-xr-x  2 rinzwind rinzwind 4096 2011-08-28 00:15 .tmp
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
rinzwind@discworld:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)

52
2017-08-27 19:17



Ich glaube nicht, dass deine letzte Aussage richtig ist. .* würde durch die Shell erweitert werden. - hammar
Ich denke, es ist wahrscheinlich richtig, aber ich habe es entfernt (nicht sicher darüber) :) - Rinzwind
das hat nicht funktioniert. Die .svn-Verzeichnisse wurden hinzugefügt - Martin Thoma
@moose Das Ausschlussmuster stimmt mit dem vollständigen Pfad überein, nicht nur mit dem Namen der Datei, Sie müssen also ausschließen */.* ebenso gut wie .* (*/ entspricht einer nicht leeren Sequenz von Verzeichnissen). - Gilles
Dies läuft, ohne etwas zu ändern! Beste Antwort. - Whitecat


Dieser enthält alle "." Verzeichnisse, Unterverzeichnisse und "." Dateien oder Verzeichnisse in Verzeichnissen ... Im Wesentlichen die erste Antwort, aber beinhaltet die oberste Ebene "." Dateien.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@

8
2017-11-01 03:19





Beispiel zum Ausschließen aller Ordner beginnend mit. :

tar cvpzf folder.tgz folder/ --exclude '.*'

Besser komprimieren, aber langsamer:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'

8
2018-05-21 16:51





Die richtige Methode wäre:

zip -r zipfile.zip directory -x directory/.*

5
2018-05-08 16:49



@ downvoter: Was ist los, das scheint für mich zu arbeiten. - jobin
Das gleiche Problem wie mit Rinzwinds ursprüngliche Antwort (jetzt korrigiert): Sie schließen Unterverzeichnisse nicht aus. Und wie Rinzwind bemerkte, müssen Sie die Platzhalter angeben, sonst wird die Shell sie erweitern. - Gilles


Beim Zippen von Verzeichnissen mit Ausnahme einiger Dateierweiterungen:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"

4
2017-12-08 17:49





Ohne versteckte Ordner und Dateien im Verzeichnis:

zip -r zipfile.zip directory/*

Verzeichnis: |── .git │   ├── src │   └── Work.file ├── .test │   └── .file └── test.file

$ zip -r zipfile.zip directory/*
adding: directory/src/ (stored 0%)
adding: directory/src/Work.file (stored 0%)
adding: directory/test.file (stored 0%)

3
2018-02-15 08:45