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
-x
Flag, 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
.jpg
Dateien 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
.git
und dessen Inhalt:zip -r zipdir.zip directorytozip -x "*.git*"
Zip-Datei eines Ordners, ohne das
.svn
Verzeichnis 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
.svn
oder eine einzelne Datei wie.bash_profile
oder 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 -@