Convertire i numeri a due byte e gli spazi nei nomi dei file ASCII
-
22-09-2019 - |
Domanda
Dato un elenco di nomi di file composti da due byte / numeri e spazi a larghezza intera (insieme con alcuni numeri mezza larghezza e underscore), come posso convertire tutti i numeri e spazi a caratteri a singolo byte?
Ad esempio, il nome del file è costituito da un numero doppio byte, seguito da uno spazio doppio byte, seguito da alcuni caratteri singolo byte:
2 2_3.ext
e mi piacerebbe cambiare a tutti singolo byte in questo modo:
2 2_3.ext
Ho provato convmv convertire da utf8 in ASCII, ma il seguente Viene visualizzato un messaggio per tutti i file:
"ascii non copre tutti i caratteri necessari per: filename "
Soluzione 3
Grazie per le vostre risposte veloci, bmargulies e bobince. Ho trovato un modulo Perl, Unicode :: giapponese , che ha aiutato ottenere il lavoro fatto. Ecco uno script bash che ho fatto (con l'aiuto di questo esempio ) per convertire i nomi dei file nella directory corrente da tutta larghezza a caratteri ridotti:
#!/bin/bash
for file in *;do
newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;')
test "$file" != "$newfile" && mv "$file" "$newfile"
done
Altri suggerimenti
È necessario o (1) normalizzazione da Java 1.6 (java.text.Normalizer
), o (2) ICU , o (3 (improbabile)) un prodotto venduto dal posto lavoro.
Quali strumenti che avete a disposizione? Ci sono funzioni di normalizzazione Unicode in diverse lingue di scripting, ad esempio in Python:
for child in os.listdir(u'.'):
normal= unicodedata.normalize('NFKC', child)
if normal!=child:
os.rename(child, normal)