Zip vse datoteke v imeniku?

Ali obstaja način, da z ukazom zip zapakiramo vse datoteke v danem imeniku? Slišal sem za uporabo *.*, vendar želim, da bi to delovalo tudi za datoteke brez končnic.

Rešitev

Uporabite lahko samo *; *.* ni potrebno. Razširitve datotek v Unixu niso posebne. * se ujema z nič ali več znaki - vključno s piko. Torej ustreza foo.png, ker je to nič ali več znakov (natančneje sedem).

Upoštevajte, da se * privzeto ne ujema z datotekami, ki se začnejo s piko (prav tako ne z *.*). To je pogosto tisto, kar želite. V nasprotnem primeru bo v bashu, če boste uporabili shopt -s dotglob (vendar bo še vedno izključil . in ..). Druge lupine imajo drugačne načine (ali pa jih sploh nimajo) za vključevanje datotek s pikami.

Alternativno ima zip tudi možnost -r (rekurzivno), s katero lahko naenkrat naredite celotna drevesa imenikov (in vam ni treba skrbeti za problem z datoteko):

zip -r myfiles.zip mydir

kjer je mydir imenik, ki vsebuje vaše datoteke. Upoštevajte, da bo izdelani zip vseboval strukturo imenikov in datotek. Kot je v svojem komentarju poudaril peterph, se to običajno šteje za dobro stvar: pri ekstrakciji zipa bodo vse ekstrahirane datoteke lepo shranjene v enem podimeniku.

Z možnostjo -j/--junk-paths lahko zipu tudi poveste, naj ne shranjuje poti.

Ukaz zip je opremljen z dokumentacijo, v kateri so opisane vse njegove (številne) možnosti; za ogled dokumentacije vnesite man zip. To ni značilno samo za zip; na ta način lahko dobite dokumentacijo za večino ukazov.

Komentarji (16)

V mojem primeru sem želel vsako datoteko zapakirati v svoj arhiv, zato sem naredil naslednje (v zsh):

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

Drug način je uporaba find in xargs: (to lahko vključuje "." imenik v zipu, vendar bi se moral še vedno pravilno izvleči. Pri mojem testu je zip pred stiskanjem odstranil piko) find . -type f -exec zip zipfile.zip {} +

(Znak + lahko nadomestite z \;, če vaša različica programa find ne podpira konca + za exec. Vendar bo počasnejši...)

To privzeto vključuje vse podimenike. Pri GNU find -maxdepth lahko to prepreči.

Komentarji (1)