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å.
487
3
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 medfoo.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 dushopt -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):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; skrivman 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
):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 avfind
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.