Există o modalitate de a zip toate fișierele într-un anumit director cu " zip " comanda? Am'am auzit de folosirea *.*
, dar vreau să lucrez pentru extensionless fișiere, de asemenea.
Puteți folosi doar *
; nu este nevoie de *.*
. Extensiile de fișiere nu sunt speciale pe Unix. *
meciuri de zero sau mai multe caractere—inclusiv un punct. Deci se potrivește foo.png
, pentru ca's zero sau mai multe caractere (șapte, pentru a fi exact).
Rețineți că *
by default nu't se potrivi fișierele care încep cu un punct (nici nu *.*
). Acest lucru este de multe ori ceea ce vrei. Dacă nu, în bash, dacă shopt -s dotglobva (dar va exclude
.și
..`). Alte scoici au moduri diferite (sau deloc), inclusiv dotfiles.
Alternativ, " zip " are, de asemenea, o `-r (recursive) opțiunea de a face întregul copaci director la o dată (și nu trebuie să vă faceți griji despre dotfile problema):
zip -r myfiles.zip mydir
unde mydir` este directorul care conține fișierele. Rețineți că a produs zip va conține structura de directoare, precum și fișierele. Ca peterph puncte în comentariul său, acest lucru este de obicei văzută ca un lucru bun: extragere zip va frumos stoca toate fișierele extrase într-un subdirector.
Puteți spune, de asemenea, zip pentru a nu stoca căi cu -j
/--junk-căi
opțiune.
La " zip " comanda vine cu o documentație vă spun despre toate ale sale (multe) opțiuni; tip om zip
să văd că documentația. Asta e't unic pentru zip; puteți obține documentația pentru cele mai multe comenzi de acest fel.
În cazul meu, am vrut să zip fiecare fișier în arhiva proprie, așa că am făcut următoarele (în zsh
):
$ for file in *; do zip ${file%.*}.zip $file; done
O altă modalitate ar fi de a găsi și de a folosi xargs: (aceasta ar putea include o "." director în cadrul zip, dar ar trebui să mai extrage corect. Cu testul meu, zip dezbrăcat la punct înainte de compresie)
găsi . -tip f -exec zip zipfile.zip {} +
(Butonul " + "poate fi înlocuit cu \;
dacă versiunea dumneavoastră de a "găsi" nu suport pe " + " end pentru exec. Acesta va fi mai lent, deși...)
Acest va în mod implicit include toate sub-directoarele. Pe GNU găsi-maxdepth` poate preveni asta.
Un alt (lent) metoda pentru a face acest lucru (care adaugă un fișier zip la un moment dat):
for f in * .[^.]*; do
[ -r "$f" ] || continue # Skip directories or non-existant files (Probably ".[^.]*" if directory has no dotfiles). Using -e will allow directories to be used as well
zip zipfile.zip "$f" # If directories are included, you probably want to add -r
done
Acest lucru are dotfile probleme de *
(soluție adăugată) și ar fi început zip o singură dată pentru fiecare fișier, adăugându-l la arhiva. În bash
, s-ar face cu o cantitate mare de fișiere.
Ar fi mai lent decât cele mai multe alte metode, dar este relativ simplu.