Jak mogę utworzyć archiwum zip z całego katalogu przez terminal bez ukrytych plików?

188

Mam projekt z dużą ilością ukrytych folderów / plików. Chcę utworzyć archiwum zip, ale w archiwum nie powinno być żadnych ukrytych folderów / plików. Jeśli pliki w ukrytym folderze nie są ukryte, nie powinny być również uwzględniane.

Wiem, że mogę utworzyć archiwum zip w katalogu takim jak ten:

zip -r zipfile.zip directory

Wiem też, że mogę wykluczyć pliki z opcją -x, więc pomyślałem, że to może zadziałać:

zip -r zipfile.zip directory -x .*

To nie zadziałało. Wszystkie ukryte katalogi nadal znajdowały się w pliku zip.

    
zadawane Martin Thoma 27.08.2011, 20:01
źródło

8 odpowiedzi

98

To również wyklucza ukryte pliki w niezakrytych katalogach:

find /full_path -path '*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
odpowiedział arrange 27.08.2011, 21:27
źródło
66

Przede wszystkim, jeśli nie masz zainstalowanego zipu, zainstaluj go najpierw w następujący sposób:

sudo apt-get install zip

Następnie wystarczy utworzyć plik zip:

zip -r compressed_filename.zip foldername

Jeśli chcesz wykluczyć ukryte pliki:

find /folder_path -path '*/.*' -prune -o -type f -print | zip ~/compressed_filename.zip -@
    
odpowiedział M A K Ripon 11.08.2015, 08:28
źródło
52

Dodaj " do .* (w przeciwnym razie twoja powłoka rozwinie .* do plików dot w bieżącym katalogu), a także wykluczy ukryte pliki w podkatalogach:

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

To spowoduje, że pliki zaczynające się od . nie będą dodawane do pliku zip.

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%)
    
odpowiedział Rinzwind 27.08.2011, 21:17
źródło
8

Ten zawiera wszystkie "." katalogi, podkatalogi i "." pliki lub katalogi w katalogach ... Zasadniczo pierwsza odpowiedź, ale zawiera najwyższy poziom "." akta.

find /full_path -path '*.*/.*' -prune -o -type f -print | zip ~/file.zip -@
    
odpowiedział cosimnot 01.11.2012, 04:19
źródło
8

Przykład wykluczania wszystkich folderów zaczynających się od. :

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

Lepiej kompresuj, ale wolniej:

tar cvpjf folder.tar.bz2 folder/ --exclude '.*'
    
odpowiedział Tigrouzen 21.05.2014, 18:51
źródło
5

Prawidłowa metoda to:

zip -r zipfile.zip directory -x directory/.*
    
odpowiedział Rômulo Neves 08.05.2014, 18:49
źródło
4

Podczas kompresowania katalogów, z wyłączeniem niektórych rozszerzeń plików:

$ cd /path/to/dir
$ zip -r dir.zip . -x "*.log" -x "*.cache"
    
odpowiedział K-Gun 08.12.2014, 18:49
źródło
3

Bez ukrytych folderów i plików w katalogu:

zip -r zipfile.zip directory/*

katalog: |── .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%)
    
odpowiedział Umanshield 15.02.2017, 09:45
źródło

Przeczytaj inne pytania na temat tagów