Hier gibt es einige Fragen zu Nicht-ASCII-Buchstaben in den Namen von Dateien, die als Streams in Zip-Dateien gespeichert sind ( Hebräisch , Chinesisch , Japanisch oder Koreanisch ). Keine der angebotenen Lösungen half mir jedoch bei einer Zip-Datei mit kyrillischen Buchstaben, die von einem Windows-Computer stammte.
Die Datei hat selbst einen kyrillischen Namen ( Космос.zip - Link zum Herunterladen). Dies ist ein Archiv mit Inhalten von null Länge, nur zur Veranschaulichung.
unzip -l
Drucke:
Archive: Космос.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-05-03 18:19 ɫ�����/ict_inf.pdf
--------- -------
0 1 file
Das Hässliche ɫ�����
steht für die Folge von Bytes C9 AB DF E8 AB DF BC AB DF
.
Ich weiß (mithilfe der GMail-Vorschaufunktion), dass dies sein sollte
Archive: Космос.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-05-03 18:19 РосКосмос/ict_inf.pdf
--------- -------
0 1 file
Das heißt , wir müssen Karte C9 AB DF E8 AB DF BC AB DF
zu РосКосмос
.
Es gibt mehrere häufig verwendete kyrillische 8-Bit-Codierungen: CP1251, CP866, ISO8859-5, jedoch würde dieses Wort als eine andere Folge von Bytes codiert:
Р о с К о с м о с
CP866: 90 AE E1 8A AE E1 AC AE E1
CP1251: D0 EE F1 CA EE F1 EC EE F1
ISO8859-5: C0 DE E1 BA DE E1 DC DE E1
Offensichtlich würde keine der üblicherweise verwendeten kyrillischen 8-Bit-Codierungen die Eingangsnamen in die Ausgangsnamen wie diese decodieren. Hier ist etwas Komplizierteres am Werk.
Wenn wir nur wüssten, wie man die Namen dekodiert, wäre das Umbenennen der Dateien nach dem Extrahieren mit einem geeigneten find
Skript ( https://unix.stackexchange.com/a/252000/17649 ) einfach , z
find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | here-goes-the-decoding pipeline )"' sh {} \;
oder das Dienstprogramm convmv .