Zip visus failus direktorijā?

Vai ir veids, kā ar zip komandu arhivēt visus failus, kas atrodas noteiktā direktorijā? Esmu dzirdējis, ka var izmantot *.*, bet es vēlos, lai tas darbotos arī ar failiem bez paplašinājuma.

Risinājums

Varat vienkārši izmantot *; *.* nav nepieciešams. Unix sistēmā failu paplašinājumi nav īpaši. * atbilst nullei vai vairāk rakstzīmēm, ieskaitot punktu. Tātad tas atbilst foo.png, jo tā ir nulle vai vairāk rakstzīmju (precīzāk, septiņas).

Ņemiet vērā, ka * pēc noklusējuma neatbilst failiem, kas sākas ar punktu (tāpat kā *.*). Tas bieži vien ir tas, ko jūs vēlaties. Ja tā nav, tad bash lietojot shopt -s dotglob, tas to izdarīs (bet joprojām izslēgs . un ..). Citās čaulās ir dažādi veidi (vai to nav vispār), kā iekļaut dotfailus.

Alternatīvi zip ir arī -r (rekursīvā) opcija, lai veiktu veselus direktoriju kokus uzreiz (un nebūtu jāuztraucas par dotfaila problēmu):

zip -r myfiles.zip mydir

kur mydir ir direktorija, kurā ir jūsu faili. Ņemiet vērā, ka izveidotajā zip failā būs gan direktoriju struktūra, gan faili. Kā savā komentārā norāda peterph, parasti to uzskata par labu lietu: zip izvilkšana visus izvilktos failus glīti saglabās vienā apakšdirektorijā.

Jūs varat arī pateikt zip, lai tas neuzglabā ceļus, izmantojot -j/--junk-paths opciju.

Komandai zip ir pievienota dokumentācija, kurā aprakstītas visas tās (daudzās) opcijas; ierakstiet man zip, lai apskatītu šo dokumentāciju. Tas nav tikai zip; šādā veidā var iegūt dokumentāciju vairumam komandu.

Komentāri (16)

Manā gadījumā es vēlējos katru failu ieaizzipēt atsevišķā arhīvā, tāpēc es izdarīju šādu darbību (zsh):

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

Cits veids būtu izmantot find un xargs: (tas var ietvert "." direktoriju zip, bet tas joprojām vajadzētu izvilkt pareizi. Izmantojot manu testu, zip pirms saspiešanas noņēma punktu). find . -type f -exec zip zipfile.zip {} +

(Ja jūsu find versija neatbalsta + galotni exec, + var aizstāt ar \;. Tomēr tas būs lēnāk...)

Pēc noklusējuma tiks iekļauti visi apakšdirektoriji. GNU meklētājā -maxdepth to var novērst.

Komentāri (1)