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

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

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

Ich weiß, dass ich ein ZIP-Archiv eines Verzeichnisses wie folgt erstellen kann:

zip -r zipfile.zip directory

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

zip -r zipfile.zip directory -x .*

Es hat nicht funktioniert. Alle versteckten Verzeichnisse waren noch in der Zip-Datei.

Antwort1

Wenn Sie Zip nicht installiert haben, installieren Sie es zunächst 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 -@

Ausschließen von Dateien aus einem Zip-Archiv (genommen vonhttp://osxdaily.com/2013/04/30/how-to-exclude-files-from-a-zip-archive/)

Die Grundlagen des Dateiausschlusses beim Erstellen eines Zip-Archivs drehen sich um das -xFlag, das verwendet wird, um Dateien aus dem Archiv auszuschließen, die einem bestimmten Namen oder Muster entsprechen. Im einfachsten Fall sieht es so aus:

zip archive.zip files -x "ExcludeMe"

Das bedeutet, dass Sie eine einzelne Datei ausschließen können, beispielsweise mit dem Namen „Nothanks.jpg“.

zip archive.zip images/ -x "Nothanks.jpg"

Lassen Sie uns einige konkrete Beispiele betrachten, bei denen dies nützlich ist.

Schließen Sie .DS_Store-Dateien aus Zip-Archiven aus

Dadurch wird verhindert, .DS_Store dass die normalerweise unsichtbaren Mac-Metadatendateien in ein ZIP-Archiv aufgenommen werden, die standardmäßig gebündelt sind:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

Wenn das Verzeichnis jedoch Unterverzeichnisse enthält, sollten Sie eine andere Variante dieses Befehls verwenden, um die ds_store-Dateien auch aus den Unterverzeichnissen auszuschließen:

zip -r archive.zip directory -x "*/\.DS_Store"

Hinweis: Nicht alle Shells erfordern die Anführungszeichen, damit dieser Befehl richtig funktioniert, aber in der Bash-Shell (die Standardeinstellung für OS X) müssen Sie die Anführungszeichen zum Ausschließen mit Platzhaltern und Mustern verwenden.

Bestimmte Dateitypen aus einem Zip-Archiv ausschließen

Mit Platzhaltern können Sie auch alle Dateien eines bestimmten Typs ausschließen, indem Sie sich auf die Erweiterung konzentrieren. Mit diesem Befehl wird beispielsweise ein ganzes Verzeichnis ohne alle .jpgDateien komprimiert:

zip -r archive.zip directory -x "*.jpg"

Dies könnte für jede spezifische Dateierweiterung oder jedes Muster geändert werden, das in einem Dateinamen übereinstimmt.

Schließen Sie das .git- oder .svn-Verzeichnis aus einem Zip-Archiv aus

Zip-Datei eines Verzeichnisses, Minuszeichen .gitund dessen Inhalt:

zip -r zipdir.zip directorytozip -x "*.git*"

Zip-Datei eines Ordners, ohne das .svnVerzeichnis einzuschließen:

zip -r zipped.zip directory -x "*.svn*"

Alle versteckten Dateien aus einem Zip-Archiv ausschließen

Da Muster und Platzhalter verwendet werden können, können Sie auch einige oder alle unsichtbaren Dateien und Ordner ausschließen, indem Sie ihnen einen Punkt voranstellen, unabhängig davon, ob es sich um ein Verzeichnis wie .svnoder eine einzelne Datei wie .bash_profileoder handelt .htaccess.

zip -r archivename.zip directorytozip -x "*.*"

Oder um alle unsichtbaren Dateien aus allen Unterverzeichnissen auszuschließen:

zip -r archive.zip directory -x "*/\.*"

Antwort2

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

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

Antwort3

Fügen Sie "Folgendes hinzu .*(andernfalls wird Ihre Shell .*auf die Punktdateien im aktuellen Verzeichnis erweitert) und schließen Sie auch versteckte Dateien in Unterverzeichnissen aus:

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

Dies führt dazu, dass Dateien, die mit beginnen, .nicht zu Ihrer 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%)

Antwort4

Dies umfasst alle "."-Verzeichnisse, Unterverzeichnisse und "."-Dateien oder Verzeichnisse innerhalb von Verzeichnissen... Im Wesentlichen die erste Antwort, umfasst jedoch "."-Dateien der obersten Ebene.

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

verwandte Informationen