van egy zip állományom (EnterprisejavaARchive) amiben több állomány leledzik többek között egy másik zip (JavaARchive) amiből ki szeretnék nyerni 1 db állományt úgy, hogynem szeretnék köztes állományt létrehozni.
ha tar lenne, akkor simán megoldható lenne az alábbi módon:
tar xf test.tar test/z.tar -O|tar xf - z/3 -O
ennek az analógiáját keresem Linux alatt zip- állományokra...
Köszönve előre is az ötleteket,
TamsA
- 1450 megtekintés
Hozzászólások
Most próbáltam ki, a 7zip ki tud csomagolni STDIN-ről is, meg zipet is, szóval én így ugranék neki:
unzip p eredeti.zip benne/levo.zip | 7z x /dev/stdin
Persze elképzelhető, hogy a 7zip is tud pipe-ba kicsomagolni, de első ránézésre nem találom.
- A hozzászóláshoz be kell jelentkezni
Kedves Gábor!
Sajna ez így nem működik, korábban már próbáltam.
Error: E_FAIL
Hasonló bajaim vannak a funzip-el is ...
- A hozzászóláshoz be kell jelentkezni
Igazad van, most én is kipróbáltam. Nincs kedvem utánanézni a forrásban, de azt azért nem értem, hogy ha a
7z x /dev/stdin < lo.zip
forma működik (így teszteltem az első hozzászólásom előtt), akkor a
cat lo.zip | 7z l /dev/stdin
miért nem. Pontosabban miért is kellett annyit küzdeni, hogy az első forma működjön, ha egyszer a második lenne az izgalmasabb :-(
De ez az infó arra legalább jó, hogy tudjak példát mutatni a sok shell-huszárnak, hogy miért is nem kell cat | more formájú parancsokat írni :-)
- A hozzászóláshoz be kell jelentkezni
up!
- A hozzászóláshoz be kell jelentkezni
Legnagyobb valószínűséggel nincs olyan eszköz, amivel ideiglenes fájl nélkül megcsinálható.
Illusztrációként tekintsük az alábbi megoldást egy fiktív myunzip nevű programmal: myunzip --stdout a.ear b.jar | myunzip /dev/stdin f.txt
ZIP archívban úgy kell egy fájlt megkeresni, hogy először a végére seekelünk, utána a fájllistához seekelünk, beolvassuk a fájllistát, majd a fájl tartalmának kezdtéhez seekelünk, és beolvassuk a fájlt. A legtöbb ZIP-kitömörítő pontosan ezt csinálja. A másik lehetőség az egész ZIP-fájl szekvenciális végigolvasása lenne (a legtöbb tar-kitömörítő .tar fájlokra ezt csinálja). Mivel csővezetékben (|) nem lehet seekelni, ezért a fenti megoldás nem működik, mert a másodok myunzip pipe-ban próbál seekelni.
- A hozzászóláshoz be kell jelentkezni
A central directory valóban a file végén található, de minden file elòtt ott van a local header, amiben minden benne van, ami a kicsomagoláshoz kell. Homebrew unzip-pel simán megoldható, hogy szekvenciálisan végigolvassuk az egészet és csak a szükségeseket bontjuk ki.
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam nagyon sokféle megoldást, de a zip formátum miatt csak egyetlen járható út van (legalábbis SZERINTEM, több megoldást egyelőre nem találtam). Ez a fuse-zip alkalmazása.
Nyitsz egy átmeneti könyvtárat, felcsatolod a kötetet, kibontod a neked kellő fájlt, umount, könyvtár töröl:
mkdir ./tmp
fuse-zip enyem.zip ./tmp
unzip ./tmp/ebbol.zip ezt_a_fájlt
fusermount -u ./tmp
mkdir ./tmp
--
falura elmegy, városban meg úgy sem nézik...
- A hozzászóláshoz be kell jelentkezni
Ez miben tér el a normál átmeneti fájlos kitömörítéstől? (Bocs, nincs fuse-zip-em, hogy kipróbáljam.)
- A hozzászóláshoz be kell jelentkezni
Igazából annyi az előnye, hogy nem kell előtte kibontanod a zip állományt, egyszerű fájlrendszerként látszik. A sebessége is elfogadható a köztes állománybontás nélkül.
--
falura elmegy, városban meg úgy sem nézik...
- A hozzászóláshoz be kell jelentkezni
Azt értem, hogy FS-nek látszik, de valóban nem csinál átmeneti fájlt? Mert akkor azt hiszem, valóban ez kell a kérdezőnek. Amúgy ugyanezt akkor akkor nem lehetne a KDE-féle KIO és a GNOME-féle GVFS hasonló funkcionalitásával megcsinálni? Mert mintha azok is virtuális fájlrendszerként funkcionálnak.
- A hozzászóláshoz be kell jelentkezni