Wie entferne ich Zeichen aus den Namen von Dateien in einem Ordner?

1290
Midoes

Ich habe eine Listendatei in einem Verzeichnis, aber einige von ihnen haben seltsame Zeichen im Namen. Wie kann ich nur diese Dateien umbenennen, um diese Zeichen zu löschen?

Das Computer-Betriebssystem ist Red Hat, Zeichensatz UTF-8.

Liste der Dateien

0
Ist es wirklich ein merkwürdiger Buchstabe oder ein Fragezeichen? Paul vor 8 Jahren 0

2 Antworten auf die Frage

2
Larssend

Versuchen Sie die Entgiftung. Von der Handbuchseite:

Name

Detox - Dateinamen aufräumen

Zusammenfassung

detox [-hnLrv] [-s -sequence] [-f -configfile] [--dry-run] [--special] Datei ...

Beschreibung

Das Dienstprogramm detox benennt Dateien um, um die Arbeit mit ihnen zu erleichtern. Es entfernt Leerzeichen und andere Belästigungen. Es werden auch Latin-1-Zeichen (ISO 8859-1), die in 8-Bit-ASCII-Zeichen, Unicode-Zeichen, die in UTF-8-Zeichen codiert sind, und CGI-Zeichen mit Escapezeichen übersetzt oder bereinigt werden können.

Sequenzen

Detox wird durch eine konfigurierbare Reihe von Filtern gesteuert, die als Sequenz bezeichnet werden. Sequenzen werden in detoxrc (5) ausführlicher behandelt und können mit der Option -L erkannt werden. Beispiele für Standardsequenzen sind iso8859_1 und utf_8.

Es ist in RHEL 6-Repositories verfügbar, als ich das letzte Mal überprüft habe. Ich bin mir bezüglich RHEL 7 nicht sicher. Bevor Sie die eigentliche Bereinigung durchführen, ist es ratsam, detoxden -n(Trockenlauf) -Schalter zu verwenden. Zum Beispiel: detox -rn /somedir.

Nicht in Centos 7 Standard- und Epel-Repositories enthalten .... In RHEL 6 gefunden. auch ... in Fedora 23. mdpc vor 8 Jahren 0
0
AFH

Wenn Sie detoxdie neuen Dateinamen nicht verwenden können oder mehr Kontrolle darüber haben möchten, können Sie Standardwerkzeuge verwenden.

lsBei Ausgabe an das Terminal werden als nicht druckbare Zeichen angezeigt ?. Ist der angezeigte Name (zB ab?cd) eindeutig ( ls ab?cdzeigt eine einzelne Datei), können Sie diese Maske einfach in einem mvBefehl verwenden:

mv ab?cd ab_cd 

ls -bzeigt nicht druckbare Zeichen als Escape-Sequenzen an (z. B. ab\001cd), Sie können den angezeigten Namen jedoch nicht in einem anderen Befehl verwenden, aber Sie können alle betroffenen Dateien anzeigen:

ls -b|grep '\\' ; # includes names with embedded spaces ls -b|grep '\\[^ ]' ; # excludes names with embedded spaces 

ls Bei Ausgabe in eine Datei oder Pipe wird der literale Dateiname geschrieben: In diesem Fall können Sie eine Liste von Dateinamen mit nicht druckbaren Elementen erhalten mit:

ls|env LC_ALL=C grep '[^!-~]' ; # includes names with embedded spaces ls|env LC_ALL=C grep '[^ -~]' ; # excludes names with embedded spaces 

Sie können diese Ausgabe nun an ein Skript übergeben, um die gewünschte Umbenennung durchzuführen, wie in:

ls|env LC_ALL=C grep '[^!-~]'|while l=`line`; do ... ; mv "$l" "$n" ; done 

Der ausgelassene Code formuliert den neuen Namen, den $nSie benötigen. Wenn nicht line, können Sie while read lstattdessen verwenden, obwohl dies bei Dateinamen mit führenden oder nachgestellten Leerzeichen nicht ordnungsgemäß funktioniert.