ארכיון תגיות: 7zip

תיקון בעיות של קידודי קבצים בלינוקס

בפוסט הקודם כתבתי על השמישות של אתר הפרומו לאלבום החדש של להקת משינה שעלה לאוויר לאחרונה. הסיבה העיקרית להיכנס לאתר היא ככל הנראה להוריד את הדיסק למחשב (הסיבה השנייה היא להאזין לו דרך האתר), וככל הנראה משהו התפקשש לאדם שארז את הקובץ ולכן לא נוח להשתמש בו, ובמקרים מסויימים הוא כלל לא יפתח.

לא ידועה לי מה הסיבה האמיתית שגרמה לקובץ להיפגם, אבל אני מניח שמדובר בבעיה שנובעת מדרך דחיסת הקובץ. ככל הנראה התוכנה איתה נארז הקובץ לא ממירה את שמות הקבצים לקידוד utf-8, ואני מניח שמערכות קבצים מסוג fat32 לא בהכרח משתמשות בקידוד יוניקוד בווינדוס.

נסיונות לפרוס את הקובץ אמנם מצליחים, אבל התוצאה הסופית היא קבצים שלא ניתן לקרוא את שמם.

$ unzip -v mashina-diamonds_in_the_sky.zip
Archive:  mashina-diamonds_in_the_sky.zip
Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
11866823  Defl:N 11016992   7% 2010-02-25 15:28 072fc022  ????? - ??????? ??????/01 ?????? ????.mp3
10670415  Defl:N  9919488   7% 2010-02-25 15:29 837afcc3  ????? - ??????? ??????/02 ??????? ??????.mp3
9734186  Defl:N  9011029   7% 2010-02-25 15:30 104dd258  ????? - ??????? ??????/03 ????? ?????.mp3
9359068  Defl:N  8682609   7% 2010-02-25 15:31 e755485c  ????? - ??????? ??????/04 ??? ??????.mp3
9592080  Defl:N  8914220   7% 2010-02-25 15:32 2155cca0  ????? - ??????? ??????/05 ?????? ????????.mp3
8359100  Defl:N  7736696   7% 2010-02-25 15:33 e0e61aa5  ????? - ??????? ??????/06 ????? ????.mp3
10327688  Defl:N  9572290   7% 2010-02-25 15:33 ce341b3b  ????? - ??????? ??????/07 ????? ????.mp3
11189729  Defl:N 10348867   8% 2010-02-25 15:34 872437c9  ????? - ??????? ??????/08 ?????.mp3
11271231  Defl:N 10476885   7% 2010-02-25 15:35 14706edf  ????? - ??????? ??????/09 ?????.mp3
13971247  Defl:N 12928714   8% 2010-02-25 15:35 771d8631  ????? - ??????? ??????/10 ???? ???.mp3
2890883  Defl:N  2763472   4% 2010-04-06 11:35 02e5a6f9  diamonds_in_the_sky_Cover.jpg
--------          -------  ---                            -------
109232450         101371262   7%                            11 files

לחכמולוגים שיגידו לנסות לפרוס את הקובץ עם תוכנה אחרת, אדגיש שניסיתי להשתמש גם בתוכנות אחרות, אך ללא הצלחה – שום תוכנה שבדקתי לא מאפשרת להגדיר את קידוד המקור של הקבצים כדי שהם יפרסו בהתאם לדרישת מערכת ההפעלה.

דרך 7zip התקבל מידע נוסף, שיכול לעזור לנחש שמדובר בבעית קידוד ולא סתם דחיסה דפוקה.

$ 7z l mashina-diamonds_in_the_sky.zip

7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Listing archive: mashina-diamonds_in_the_sky.zip

----
Path = mashina-diamonds_in_the_sky.zip
Type = Zip

Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2010-02-25 15:28:10 ....A     11866823     11016992  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/01 Œ‰‰ƒ ƒ‰‰ˆ.mp3
2010-02-25 15:29:46 ....A     10670415      9919488  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/02 ‰„Œ…Ž‰ ™Ž‰‰.mp3
2010-02-25 15:30:50 ....A      9734186      9011029  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/03 „€…™˜ „‘Ž…‰.mp3
2010-02-25 15:31:48 ....A      9359068      8682609  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/04 ‰ „–ŒŒ‰.mp3
2010-02-25 15:32:44 ....A      9592080      8914220  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/05 Œƒ‘Ž …”…Œ‘—‰.mp3
2010-02-25 15:33:20 ....A      8359100      7736696  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/06 Žƒ…˜„ —ˆ„.mp3
2010-02-25 15:33:56 ....A     10327688      9572290  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/07 ‰—…˜ ’‰˜.mp3
2010-02-25 15:34:28 ....A     11189729     10348867  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/08 ‚’‚…’.mp3
2010-02-25 15:35:02 ....A     11271231     10476885  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/09 „‰‰š‰.mp3
2010-02-25 15:35:40 ....A     13971247     12928714  Ž™‰„ - ‰„Œ…Ž‰ ™Ž‰‰/10 ‰Œƒ„ ™Œ‰.mp3
2010-04-06 11:35:56 ....A      2890883      2763472  diamonds_in_the_sky_Cover.jpg
------------------- ----- ------------ ------------  ------------------------
109232450    101371262  11 files, 0 folders

הפתרון מבחינתי היה להשתמש בתוכנה convmv. התוכנה הנ"ל מבצעת את מה שעושה iconv לקבצי טקסט ברמת קבצים ותיקיות, ונמצאת במאגרים בחבילה convmv. השימוש בפקודה די דומה ל־iconv עם מספר שינויים קלים, וכדאי לעיין במדריך למשתמש כדי לקבל את המידע הדרוש.

במקרה שלנו את הקבצים כבר פרסתי בדיסק, ויכולתי להשתמש בהם למרות שהטרמינל מציג אותם כסימני שאלה. אפשר כמובן להתחכם ולעשות mount למחיצה עם קידוד זהה לקידוד בו השתמשו בדחיסת הקובץ כדי שהוא יפתח כראוי ואז ניתן יהיה להעתיק אותו למחיצה הרגילה, אבל למה לעשות את זה אם יש פקודה חזקה כמו convmv שתעשה זאת עבורנו?

לאחר שניסיתי לקרוא את הקבצים בקידוד iso-8859-8 (המוכר גם בתור windows-1255) ללא הצלחה, ניסיתי את הקידוד cp862 שהיה קידוד הדף של העברית לפני שמערכות הפעלה גרפיות השלטו על מחוזותינו. וראו איזה פלא – אפשר לראות את שמות הקבצים!

$ convmv -f cp862 -t utf8 -r *
Your Perl version has fleas #37757 #49830
Starting a dry run without changes...
mv "��� - ����� ����/02 ����� ����.mp3"	"��� - ����� ����/02 יהלומים בשמיים.mp3"
mv "��� - ����� ����/06 ��� ����.mp3"	"��� - ����� ����/06 מדורה קטנה.mp3"
mv "��� - ����� ����/04 ��������.mp3"	"��� - ����� ����/04 בין הצללים.mp3"
mv "��� - ����� ����/03 ����� ���.mp3"	"��� - ����� ����/03 האושר הסמוי.mp3"
mv "��� - ����� ����/01 ������ ����.mp3"	"��� - ����� ����/01 בליינד דייט.mp3"
mv "��� - ����� ����/07 ����� ����.mp3"	"��� - ����� ����/07 ביקור בעיר.mp3"
mv "��� - ����� ����/05 ���� ��������.mp3"	"��� - ����� ����/05 לנדסמן ופולנסקי.mp3"
mv "��� - ����� ����/08 �����.mp3"	"��� - ����� ����/08 געגוע.mp3"
mv "��� - ����� ����/09 �����.mp3"	"��� - ����� ����/09 הייתי.mp3"
mv "��� - ����� ����/10 ���� ���.mp3"	"��� - ����� ����/10 ילדה שלי.mp3"
mv "./��� - ����� ����"	"./משינה - יהלומים בשמיים"
No changes to your files done. Use --notest to finally rename the files.
  • הפרמטר ‎-f מגדיר את קידוד המקור של הקובץ
  • הפרמט ‎-t מגדיר את קידוד היעד של הקובץ
  • הפרמטר ‎-r מגדיר לתוכנה לרוץ באופן רקורסיבי על תיקיות
  • * מציין לתוכנה להתייחס לכל הקבצים והתיקיות בתיקייה הנוכחית – קצת מסובך יהיה לתת לה את שם התיקייה כאשר אין באפשרותנו להקליד את התווים אליהם היא מצפה.

במידה ואנחנו מרוצים מהתוצאה ורוצים שהתוכנה תעשה משהו מעבר להצגה למסך של הפקודות אותן יש להריץ, נוסיף את הפרמט ‎–notest כדי לבצע את הפעולות שהוצעו.

$ convmv -f cp862 -t utf8 -r * --notest
$ ls -al משינה\ -\ יהלומים\ בשמיים/
total 103872
drwxr-xr-x 2 tomer tomer     4096 2010-04-08 01:10 .
drwxr-xr-x 3 tomer tomer     4096 2010-04-08 01:10 ..
-rw-r--r-- 1 tomer tomer 11866823 2010-02-25 15:28 01 בליינד דייט.mp3
-rw-r--r-- 1 tomer tomer 10670415 2010-02-25 15:29 02 יהלומים בשמיים.mp3
-rw-r--r-- 1 tomer tomer  9734186 2010-02-25 15:30 03 האושר הסמוי.mp3
-rw-r--r-- 1 tomer tomer  9359068 2010-02-25 15:31 04 בין הצללים.mp3
-rw-r--r-- 1 tomer tomer  9592080 2010-02-25 15:32 05 לנדסמן ופולנסקי.mp3
-rw-r--r-- 1 tomer tomer  8359100 2010-02-25 15:33 06 מדורה קטנה.mp3
-rw-r--r-- 1 tomer tomer 10327688 2010-02-25 15:33 07 ביקור בעיר.mp3
-rw-r--r-- 1 tomer tomer 11189729 2010-02-25 15:34 08 געגוע.mp3
-rw-r--r-- 1 tomer tomer 11271231 2010-02-25 15:35 09 הייתי.mp3
-rw-r--r-- 1 tomer tomer 13971247 2010-02-25 15:35 10 ילדה שלי.mp3

מספר הערות לפני פיזור:

  • פריסת הקובץ עם 7zip קצת בעייתי, מאחר והתוכנה מתרגמת את שמות הקבצים ל־unicode. מאחר והיא לא מצליחה לפרש כראוי את הקידוד של הקובץ, יהיה מסובך יותר לעבוד עם הקבצים אם כי אני מניח שניתן יהיה לעשות זאת עם מספר פעולות המרה נוספות.
  • מאחר ובחרנו להריץ את הפעולה על כל הקבצים בתיקייה מטעמי נוחות, כדאי לוודא שאין בתיקייה קבצים מיותרים. תפרסו את הקובץ לתיקיית עבודה זמנית – לעולם אל תפעילו פקודות מפוקפקות בתיקיית הבית שלכם עם תוכנם של הקבצים חשוב לכם!