Sie haben ein Codierungsproblem, das behoben werden sollte.
Das ?
angezeigte by ls
ist ein Platzhalter und bedeutet nicht, dass die Datei einen Namen hat ?
.
So reproduzieren Sie Ihr Problem iconv
auf einem üblichen, mit utf8 konfigurierten Linux-System:
$ mkdir /tmp/test $ cd /tmp/test $ touch $(echo é | iconv -t windows-1252) # that's the eacute character $ ls ? $ ls|cat �
Die letzte Zeile bedeutet nur "ungültige UTF8-Codierung wird angezeigt" und kann wahrscheinlich nicht korrekt kopiert / eingefügt werden, ohne dass die Informationen verloren gehen. windows-1252
ist nur ein Beispiel. Es hätte viele andere geben können (zB:) iso-8859-1
. Die Informationen sind immer noch da:
$ ls|iconv -f windows-1252 é
Wenn Sie also herausgefunden haben, welche Kodierung zum Schreiben dieser Dateien unter Linux verwendet wurde (versuchen Sie es iconv -l|egrep -i 'win|iso-8859'
mit einer möglichen Kandidatenliste), können Sie versuchen, die Stapelumbenennung durchzuführen. Seien Sie vorsichtig, während ein Beispiel funktionieren könnte, und es kann bei einer anderen Datei fehlschlagen.
Beispiel für die Umbenennung:
ENCODING="windows-1252" # once the right encoding was found for file in *; do dest="$(printf '%s' "$file" | iconv -f "$ENCODING")" mv -i "$file" "$dest.new" mv -i "$dest.new" "$dest" done