Unzip with Unicode

Régóta nem implementálják unzip parancsba a character kódolás támogatását, ami Linux-on pl. akkor gond, ha egy Windows-on készült ékezetes fájlneveket tartalmazó .zip-et kell kibontani, amelybe nem unicode-os fájlnevek kerülnek. 7zip esetenként elhasal, unzip pedig ugye a latin kódolás szerint hozza létre a unicode-os rendszeremen a fájlneveket.

Itt van egy szál arról, hogy létezik egy patch archlinux-on, amely egy -O és -I kapcsolót add hozzá be- és kimeneti karakter kódolás állításának lehetőségéhez.

Átmenetni megoldásnak összeraktam egy script-et (user-eknek érdemes betenni a nautilus-actions-be lokális menüpontnak .zip fájlokra). Nem szép megoldás ugyan. Debian-on tesztelve.


#!/bin/sh

# UNZIP .zip files and convert filenames to Unicode charset

if   [ -z "$1" ]; then echo "error: no file name given"  ; exit 1; fi
if ! [ -e "$1" ]; then echo "error: file doesn't exist"  ; exit 1; fi
if   [ -d "$1" ]; then echo "error: file is a directory" ; exit 1; fi

if ! which unzip  1>/dev/null; then echo "unzip command missing";  exit 1; fi
if ! which convmv 1>/dev/null; then echo "convmv command missing"; exit 1; fi

CHARCODE="cp852"
FILE="$1"
TMP=`mktemp -d`

echo FILE = "$FILE"
echo TEMP DIR = "$TMP"

unzip "$FILE" -d "$TMP" || exit 1
convmv --notest -r -f "$CHARCODE" -t utf8 "$TMP"/*

mv -u "$TMP"/* `dirname "$FILE"`
rm -rf "$TMP"

Hozzászólások

Jól látom hogy még mindig nincs benne a patch?

----------
[GB ≠ GiB] [MB ≠ MiB] [kB ≠ kiB] [1000 ≠ 1024] [Giga ≠ gram] [Mega ≠ milli] [Kelvin ≠ kilo] [Byte ≠ bit]

Irgum-burgum!

- angol nyelvű win7-en
- ékezetes fájlnevű txt fájl
- küldése tömörített mappába
...
- kibontása Debian Wheezy-n.

Íme a probléma és a megoldás:


$ unzip ../teszt.zip 
Archive:  ../teszt.zip
 extracting: Gy?m?lcsv?d? ?gy?f?ny?r?.txt  
 extracting: ekezet_nelkuli_fajlnev.txt  


$ ls -la 1/
total 8.0K
drwxr-xr-x  2 cscs cscs 4.0K márc   9 21:09 .
drwxr-xr-x 40 cscs cscs 4.0K márc   9 21:07 ..
-rw-r--r--  1 cscs cscs    0 márc   9 16:18 ekezet_nelkuli_fajlnev.txt
-rw-r--r--  1 cscs cscs    0 márc   9 16:18 Gy?m?lcsv?d? ?gy?f?ny?r?.tx



$ convmv -f iso-8859-1 -t cp850 -r --nosmart --notest 1/
Your Perl version has fleas #37757 #49830 
mv "1/Gy�m�lcsv�d� �gy�f�ny�r�.txt"     "1/Gy�m�lcsv�d� �gy�f�ny�r�.txt"
Ready!


$ convmv -f cp852 -t utf8 -r --nosmart --notest 1/
Your Perl version has fleas #37757 #49830 
mv "1/Gy�m�lcsv�d� �gy�f�ny�r�.txt"     "1/Gyümölcsvédő ágyúfűnyíró.txt"
Ready!


$ ls -la 1/
total 8.0K
drwxr-xr-x  2 cscs cscs 4.0K márc   9 21:10 .
drwxr-xr-x 40 cscs cscs 4.0K márc   9 21:07 ..
-rw-r--r--  1 cscs cscs    0 márc   9 16:18 ekezet_nelkuli_fajlnev.txt
-rw-r--r--  1 cscs cscs    0 márc   9 16:18 Gyümölcsvédő ágyúfűnyíró.txt

----------
[GB ≠ GiB] [MB ≠ MiB] [kB ≠ kiB] [1000 ≠ 1024] [Giga ≠ gram] [Mega ≠ milli] [Kelvin ≠ kilo] [Byte ≠ bit]