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