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

188

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 Verzeichnisses wie folgt 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 waren immer noch in der Zip-Datei.

    
Martin Thoma 27.08.2011, 20:01

8 Antworten

98

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

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip [email protected]
    
arrange 27.08.2011, 21:27
66

Wenn Sie keine zip 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 [email protected]
    
M A K Ripon 11.08.2015 08:28
52

Fügen Sie " zu .* hinzu (andernfalls erweitert Ihre Shell .* auf die 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, die mit einem . beginnen, nicht in Ihre Zip-Datei eingefügt werden.

[email protected]:~/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
[email protected]:~/tmp$ zip -r zipfile.zip . -x .*
adding: .tmp/ (stored 0%)
adding: tmp/ (stored 0%)
[email protected]:~/tmp$ zip -r zipfile.zip . -x ".*" -x "*/.*"
updating: tmp/ (stored 0%)
    
Rinzwind 27.08.2011 21:17
8

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 [email protected]
    
cosimnot 01.11.2012 04:19
8

Beispiel zum Ausschließen aller Ordner, mit denen begonnen wird. :

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

Besser komprimieren, aber langsamer:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
    
Tigrouzen 21.05.2014 18:51
5

Die richtige Methode wäre:

zip -r zipfile.zip directory -x directory/.*
    
Rômulo Neves 08.05.2014 18:49
4

Beim Zippen von Verzeichnissen mit Ausnahme einiger Dateierweiterungen:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
K-Gun 08.12.2014 18:49
3

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%)
    
Umanshield 15.02.2017 09:45

Tags und Links