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å.
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.
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
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.