Ahogy a fórumon láttátok az elmúlt időben egy kisebb problémával küszködtem a zip fájlok kicsomagolásánál. Pár érdekes karakter került be a magyar ékezetes betűk helyére.
Ilyen szép sormintaszerű lett és egypár karakter hiányzott is:
Cs sz s kir bor (Miksz th K lm n - Z¢r d Ern) - 01.jpg
A karakterek képe attól függő, hogy éppen milyen kicsomagoló programmal csomagolom ki, de soha nem helyesen jelent meg.
Ha ilyen van, mit lehet tenni?
Első megoldás:
Kicsomagolom, majd kézzel átírogatom a nevet, hogy jó legyen. Ez nem járható út, ha sok fájl van és ott a hibázási lehetőség is.
Második megoldás:
Mivel eltérő a karakterkódolás a fájlnevekben, így konvertáljuk át és akkor jó lesz.
Valahogy így kellene:
env LANG=C 7z x '.zip'
convmv -r -f utf8 -t iso-8859-1 --fixdouble --replace --notest fájlok
Ezzel megadjuk a 7zip-nek azt a környezetet, amit akarunk, majd kicsomagoltatjuk és a convmv-vel a neveket a utf8-ra konvertáljuk. Érdemes előbb a - - notest kapcsoló nélkül tesztben futtatni, hogy lássuk konvertálás nélkül, hogy mi lesz az eredmény.
Figyeljünk arra, hogy ha szóköz van a fájlnévben, vagy *.zip-et adunk meg, akkor idézőjelek közé tegyük, mert a 7zip így szereti.
Ez igaz is a legtöbb esetben, de nekem nem segített. Nem tudni, hogy milyen kódolással készítette a csomagot a készítője, így a megszokott beállítások nem segítettek.
A convmv sok kódolást ismer, így ki kellene keresni azt, hogy melyik lesz a jó nekem, azaz milyen környezetben csomagolták a fájlt. Ezt a - - list paranccsal listázhatjuk ki, és a kapott értékeket az iso-8859-1 helyére írhatjuk.
Ez sem hozott jó eredményt, azaz nem lettek magyar ékezetesek a fájlok autómatikusan.
Harmadik megoldás:
Ha nem lettek azok automatikusan, akkor írjuk át őket, de a mennyiség miatt ne kézzel, hanem scriptesítsük a dolgot, erre a rename lesz az alkalmas. Egyesével kigyűjtjük a kicserélni kívánt karaktereket, és kicseréljük a jóra. Érdemes a sokféle convmv eredmény közül azt választani ami legjobban olvasható, hogy a munkánk egyszerűbb legyen.
Egy betű kicserélése így néz ki:
rename 's/¢/ó/g' *.*
Azaz az összes magyar ékezetes betűre kell egy sor rename.
Ezt akkor érdemes használni, ha további scriptes feldolgozás is lesz, hiszen így egy scripttel meg lehet majd csinálni minden teendőt.
Negyedik megoldás:
Ha windows alatt tömörítették, akkor bontsuk ki windows alatt! Erre akkor van mód, ha a környezetünkben van van olyan gép amin windows fut. Itt is belefuthatunk hibákba, de jó eséllyel eredményt érünk el.
Ha nincs erre lehetőségünk, akkor jó megoldás, ha telepítünk egy virtuális gépre egy windowst, a megosztott kibontó könyvtárba tenni a zip-et, majd ott bontjuk ki. Ez jó megoldás, és működik is. Kicsit olyan mintha verébre ágyúval lőnénk, de ha amúgy is kell egy virtuális windoes, akkor megéri ezzel pepecselni.
Ha windows, akkor wine? Igen! Ez lett a legjobb megoldás.
Telepítsük fel a wine-t. Én így raktam fel, bár lehet, hogy a szoftverközpontból felrakott is jó lesz.
sudo dpkg --add-architecture i386
sudo add-apt-repository ppa:wine/wine-builds
sudo apt-get update
sudo apt-get install --install-recommends winehq-devel
sudo apt-get install winetricks
winecfg
Majd szedjük le a 7-zip-et, windowsos verzióban:
http://www.7-zip.org/download.html
Telepítsük fel a wine segítségével. Ha ez kész, akkor már lesz egy 7-zip windowsos verziónk, amivel simán és jól ki tudjuk bontani a zip-eket, és jó, ékezetesek lesznek a nevek. A program grafikus felülete jól használható, nem nagyon térnék ki rá.
Miért a 7-zip? Mert jó, grafikus és ingyenes. ÉS van parancssoros verziója is, így ha scriptesíteni akarunk valami feladatot, akkor azt megtehetjük.
Terminálból indíthatjuk a 7z.exe-t.
wine ~/.wine/drive_c/'Program Files (x86)'/7-Zip/7z.exe x '*.zip'
Amint látni, pár dologra itt is figyelni kell. A teljes elérési utat meg kell adni, ahol kell, ott rakjunk be egyszeres idézőjeleket. Ilyen a Program Files (x86) rész.
Ha csak annyit teszünk, hogy a fenti parancsot egy scriptbe berakjuk, adunk neki egy normális nevet, majd bemásoljuk olyan könyvtárba, ami a PATH-ban szerepel, akkor bárhonnét meg tudjuk hívni és kicsomagolja a könyvtárban lévő összes fájlt. Úgy, hogy az ékezetes betűink jók lesznek s nem lesz további munka velük.
Felhasználható komolyabb scriptekben is, vagy összetettebb paraméterekkel is, ahogy az feladat megkívánja.