Van-e mód arra, hogy az adott könyvtár összes fájlját a zip paranccsal tömörítsük? Hallottam a *.* használatáról, de azt szeretném, ha kiterjesztés nélküli fájloknál is működne.

Megjegyzések

  • Megpróbálta már egy szinttel feljebb navigálni a kívánt könyvtárból, és zip myarch.zip mydir/*?
  • vagy jobb zip -r myarch.zip mydir/*
  • vagy jobb zip -r myarch.zip mydir
  • *.* minden fájlt jelent, amelyen van egy pont. A cp / m és a dos fájlokban volt egy pont, és ez késztette a gépelésre (nem tudta megtenni *). Ezért az emberek meglátogatták a *.* mint az összes fájl. Végül a Microsoft hosszú fájlneveket adott hozzá, amelyeknek nulla vagy több pontja lehet. Ha olyan fájlt szeretne találni, amelyiken van egy pont a Windows rendszeren, írja be a következőt: *.*.*.

Válasz

Csak a * parancsot használhatja; nincs szükség a következőhöz: *.*. A fájlkiterjesztések nem különlegesek a Unix rendszeren. * nulla vagy annál több ch-vel felel meg karakterek – egy pontot is beleértve. Tehát megfelel a foo.png kifejezésnek, mert ez nulla vagy több karakter (egészen pontosan hét).

Ne feledje, hogy * alapértelmezés szerint nem egyezik a ponttal kezdődő fájlokkal (*.* sem). Gyakran ezt akarja. Ha nem, akkor a bash-ban, ha shopt -s dotglob megteszi (de a . és ..). Más héjak különböző módon (vagy egyáltalán nem) tartalmazzák a dotfájlok beillesztését.

Alternatív megoldásként a zip is rendelkezik -r (rekurzív) lehetőség teljes könyvtárfák egyszerre történő elvégzésére (és nem kell aggódnia a dotfile problémáért):

zip -r myfiles.zip mydir 

ahol mydir a fájlokat tartalmazó könyvtár. Vegye figyelembe, hogy az előállított zip tartalmazza a könyvtárstruktúrát, valamint a fájlokat. Mint Peter megjegyzi kommentárjában, ezt általában jó dolognak tekintik: a zip kibontása az összes kibontott fájlt szépen tárolja egy alkönyvtárban.

Azt is megadhatja a zip-nek, hogy ne tárolja az elérési utakat a -j / --junk-paths opció.

A zip parancs mellékelve van dokumentáció, amely ismerteti az összes (sok) opciót; írja be a man zip parancsot a dokumentáció megtekintéséhez. Ez nem egyedülálló a zip-en; így a legtöbb parancshoz dokumentációt kaphat.

Megjegyzések

  • Érdemes hozzáadni, hogy ez jó gyakorlatnak tekinthető, hogy az archívumban mindent megtalál egy felső szintű könyvtárban – így az ember nem szennyezi a kibontáskor a jelenlegi könyvtárát.
  • @peterph kész. Bár ez kevésbé szokásos a zip fájlokban, mint például a tarfile-ekben, félek ‘.
  • sajnos igen. Valószínűleg a Windows miatt A drag ‘ n ‘ húzás öröksége az asztalra és a linuxos örökség a forráskódokkal való munka során.
  • Tartsa be ne feledje, hogy * shell-globbing nem tartalmaz ‘ t tartalmaz fájlokat (azaz .). Ez egy másik előnye annak, ha az egész könyvtárat név szerint tömörítjük.
  • De az -r használata magában foglalja a könyvtárat is, ami megtöri az I ‘ m csinálom. A ‘ t * nem tartalmazna . és ..?

Válasz

Esetemben minden fájlt a saját archívumába akartam tömöríteni, ezért a következőket tettem (zsh):

$ for file in *; do zip ${file%.*}.zip $file; done 

Megjegyzések

  • Ott ‘ nincs itt mkv? Itt semmi sem különösebben zsh -specifikus. ‘ meg akarja idézni a fájlnevet tartalmazó minden változót, tehát zip "${file%.*}.zip" "$file" a kettős idézőjelekkel mindkét változó körül.
  • @tripleee Először is köszönöm, hogy rámutattak a mkv -re való téves hivatkozásomra. Másodszor, az zsh fájlban az argumentumok idézése felesleges, ellentétben a bash fájlokkal. ‘ ezért adtam meg, hogy ez a zsh parancs.
  • Az utolsó pontosvessző cseréje egy ampersand jelentősen felgyorsíthatja (ha a könyvtárban lévő fájlok száma ésszerű …). Egyébként find . -type f -maxdepth 1 -print0|xargs -r0 -n1 -P64 -I{} bash -c 'f="{}"; zip "${f%.*}.zip" "$f"' (a -P beállítással a CPU-szálak függvényében …) (Sok GNU-függőség …)
  • az egyes fájlok saját archívumába tömörítéséhez tegye a következőt: gzip *

Válasz

Egy másik módszer a find és az xargs használata: (ez tartalmazhat egy “.” könyvtárat a zip-ben, de akkor is helyesen kell kibontania. A tesztemmel a zip levette a pontot tömörítés) find . -type f -exec zip zipfile.zip {} +

(A + helyettesíthető a következővel: \; ha az find verziója nem támogatja az + véget az exec számára. Lassabb lesz, bár …)

Ez alapértelmezés szerint az összes alkönyvtárat tartalmazza. A GNU-n a -maxdepth keresés megakadályozhatja ezt.

Megjegyzések

  • (ellentétben a *, ide tartoznak a dotfájlok, és nem fognak ‘ átesni, ha túl sok fájl van egy könyvtárban)

Válasz

Egy másik (lassú) módszer erre (egy fájl hozzáadása egyszerre a zip-hez):

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 

Ennek a dotfile problémái vannak: * (megkerülő megoldás hozzáadva), és minden fájlnál egyszer elindítaná a zip-et, hozzáadva az archívumhoz. A bash könyvtárban nagy mennyiségű fájllal foglalkozna.

Lassabb lenne, mint a többi módszer, de viszonylag egyszerű.

Megjegyzések

  • Azt mondanám, hogy ez kevésbé egyszerű, mint az elfogadott válasz, és lassabb, ami felveti a kérdést: ” Miért tenné ezt valaki? “. Ha tud választ adni erre a kérdésre, javasoljuk, hogy ezt a kontextust adja meg a válaszában, különben úgy gondolom, hogy ez rossz válasz egy régi kérdésre, amelyre már jó a válasz.
  • @Centimane: Megjegyzem a korlátozásokat . Úgy érzem, ennek oktatási értéke van. (Ha nem hagyja ki a könyvtárakat, akkor az egészen egyszerű). Ha sokkal gyorsabb választ szeretne kapni egy (szokásos) külső eszköz használatával, akkor a másik válaszom ezt lefedi . (eltávolítva a dotfájlok kezelését (ami a kérdésben említett hiányuk nélkül befolyásolja a helyességet), elég elegánsnak érzem): for f in *; do zip zip.zip "$f"; done
  • Ne feledje, hogy az elfogadott A válasz nem használ ‘ külső parancsot, és gyorsabb lenne. Milyen forgatókönyv esetén lenne hasznos ez a válasz?
  • @Centimane Tar-val, ha több fájl van, mint amit a bash átadhat paraméterként. (a find + xargs jobb, mert a ciklusok könnyebbek …). Ez egy (egyedi) válasz a kérdésre. Természetesen nem ez az optimális válasz. (A nem optimális válaszok továbbra is hasznosak lehetnek hasonló problémák esetén, ha valakinek kissé más a helyzete – pl. Tar fájlt szeretne könyvtárakkal ellátni)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük