Zip alle filer i katalogen?

Finnes det en måte å komprimere alle filer i en gitt katalog med kommandoen zip? Jeg har hørt om å bruke *.*, men jeg vil at det skal fungere for filer uten filtype også.

Løsning

Du kan bare bruke *; det er ikke behov for *.*. Filendelser er ikke spesielle på Unix. * samsvarer med null eller flere tegn - inkludert en prikk. Så det samsvarer med foo.png, fordi det er null eller flere tegn (syv, for å være nøyaktig).

Merk at * som standard ikke samsvarer med filer som begynner med et punktum (det gjør heller ikke *.*). Dette er ofte det du ønsker. Hvis ikke, i bash, hvis du shopt -s dotglob det vil (men vil fortsatt ekskludere . og ..). Andre skall har forskjellige måter (eller ingen i det hele tatt) for å inkludere dotfiler.

Alternativt har zip også et -r (rekursivt) alternativ for å gjøre hele katalogtrær på en gang (og ikke trenger å bekymre deg for dotfile-problemet):

zip -r myfiles.zip mydir

der mydir er katalogen som inneholder filene dine. Merk at den produserte zip-filen vil inneholde katalogstrukturen i tillegg til filene. Som peterph påpeker i sin kommentar, blir dette vanligvis sett på som en god ting: å pakke ut zip-filen vil lagre alle de utpakkede filene pent i en underkatalog.

Du kan også be zip om ikke å lagre stiene med -j / --junk-paths-alternativet.

Kommandoen zip kommer med dokumentasjon som forteller deg om alle dens (mange) alternativer; skriv man zip for å se den dokumentasjonen. Dette er ikke unikt for zip; du kan få dokumentasjon for de fleste kommandoer på denne måten.

Kommentarer (16)

I mitt tilfelle ønsket jeg å zippe hver fil i sitt eget arkiv, så jeg gjorde følgende (i zsh):

$ for file in *; do zip ${file%.*}.zip $file; done
Kommentarer (3)

En annen måte ville være å bruke find og xargs: (dette kan inkludere en "." katalog i zip-filen, men den skal fortsatt trekke ut riktig. Med min test, zip strippet prikken før komprimering) find . -type f -exec zip zipfile.zip {} +

(+ kan erstattes med \; hvis din versjon av find ikke støtter + slutten for exec. Det vil imidlertid være langsommere...)

Dette vil som standard inkludere alle underkataloger. På GNU find kan -maxdepth forhindre dette.

Kommentarer (1)