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.
487
3
Uporabite lahko samo
*
;*.*
ni potrebno. Razširitve datotek v Unixu niso posebne.*
se ujema z nič ali več znaki - vključno s piko. Torej ustrezafoo.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 uporabilishopt -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):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 vnesiteman 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
):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 programafind
ne podpira konca+
za exec. Vendar bo počasnejši...)To privzeto vključuje vse podimenike. Pri GNU find
-maxdepth
lahko to prepreči.