Wie benenne ich Dateien / Ordner rekursiv um, um ihre Namen Windows-freundlich zu machen?


11

Ich habe eine Reihe von Dateien auf einer Ubuntu-Box, deren Dateinamen verschiedene Zeichen enthalten, die Windows nicht akzeptiert (meistens ":" und "*", aber möglicherweise auch andere).

Was ist der einfachste Weg, um diese alle umzubenennen und auf einen Windows-Computer zu verschieben? Es ist in Ordnung, diese Zeichen durch "[Doppelpunkt]" und "[Sternchen]" zu ersetzen.


1
Sie sollten solche Namen auch unter Linux (insbesondere *) vermeiden .
Cyrus

4
@cYrus Hängt davon ab, wie Sie mit Dateien umgehen. Ich stelle mir vor, es ist nur ein Problem mit Skripten und in Shells. Ich bin unter OS X und der einzige verbotene Charakter ist :, was schlimm genug ist. Das Benennen von Dokumenten nach ihrem Inhalt ist nützlich. Wenn ein Artikelname mit einer Frage endet, sollte dies auch der Dateiname sein.
Daniel Beck

@cYrus und ich tun dies in meiner Software, aber einige Software wurde von Leuten geschrieben, die dies nicht tun. Zum Beispiel verwendet qmail: in fast jedem Dateinamen, den es erstellt.
RomanSt

@ Daniel Beck: Sicher, aber leider reicht es nicht aus, ein Dateisystem zu haben, das solche Namen unterstützt, da Sie Programme verwenden können, die das Ganze durcheinander bringen. Ich benutze nicht einmal Leerzeichen.
Cyrus

2
@Steven gute Frage! Ich denke, Windows wäre etwas nützlicher, da es vorkommen kann, dass jemand die Dateien unter Windows empfängt und sie auf dieser Plattform reparieren muss.
Peltier

Antworten:


4

Schauen Sie sich Glindra umbenennen und entgiften .

Glindra-Dateidienstprogramme können entweder unter Windows oder Linux installiert werden. Beispiele für die Bereinigung von Dateinamen unter Windows:

rena *.* -portable

rena *.* -safe
  • -sichere Zuordnungen von
    Bindestrichen (Bindestrichen) zu Unterstrichen.
    Reduziert Leerzeichen.
    Ordnet problematische Zeichen wie *?: [] "<> | () {} Dem Unterstrich zu.
  • -portable
    Führt die gleichen Bereinigungsvorgänge wie -safe aus und zusätzlich: Ordnet
    alle 8-Bit-Zeichen aus der oberen Hälfte des lateinischen 1-Alphabets angemessenen 7-Bit-Fallback-Zeichen zu.
    Ordnet die einfachen Anführungszeichen dem Unterstrich zu.

Quelle: Beheben von Unix / Linux / POSIX-Dateinamen: Steuerzeichen (wie z. B. Newline), führende Bindestriche und andere Probleme


Diese Seite zeigt eine zwischengespeicherte Kopie von 404. Google .
Daniel Beck

Das ist ein großartiger Scherz von David Wheeler! Besonders nachdem ich gerade meine Tastatur geschlagen hatte, nachdem ich versucht hatte, in ein Verzeichnis mit dem Namen "~ \ irina" zu schreiben. Möchten Sie erraten, ob die Tab-Vervollständigung daran funktioniert hat? ...
RomanSt

1
Detox dient dazu, Windows-Dateien Unix-freundlich zu machen, nicht umgekehrt.
Endolith

3
@DennisWilliamson - Es scheint, dass Glindra (für Windows) keine Zeichen mit ungültigen Dateinamen umbenennen kann. G:\spc>rena.exe -safe -portable *.txtAusgänge[FATAL-ERROR] Filename syntax error: aa:a.txt
Steven

1
Beachten Sie die Änderung der Syntax rena '*.*' -portable, wenn Sie zu Linux wechseln , und wenn Sie möchten, dass sie rekursiv ist, verwenden Sie etwas wie rena '***/*.*' -portableunter Linux. Und ich glaube, die Umbenennung sollte unter Linux erfolgen, nicht unter Windows.
Holroy

4

Versuchen Sie es mit Recuva .

Es ist das einzige Windows-Dienstprogramm, das ich gefunden habe und das nicht Windows-freundliche Dateinamen verarbeitet.

Aktivieren Sie " Nach nicht gelöschten Dateien suchen" (zur Wiederherstellung von beschädigten oder neu formatierten Datenträgern) und scannen Sie Ihren Ordner. Aktivieren Sie beim Wiederherstellen die Ordnerstruktur wiederherstellen . Recuva "kopiert" effektiv das gesamte Verzeichnis an einen anderen Speicherort und "santitisiert" unfreundliche Dateinamen.


1

Ohne unter Linux zu sein und ohne etwas zu testen, glaube ich, dass man Einzeiler wie die folgenden verwenden könnte.

So ändern Sie ein Zeichen:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

Und zum Schluss alle nicht alphanumerischen Zeichen entfernen:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +

Beachten Sie, dass dies mit allen anderen illegalen Zeichen von Fenstern erweitert werden muss, dh<>:"/\|?*
holroy

0

Wenn sich Ihre Dateien bereits auf einem NTFS-Volume befinden, scheint das Ausführen von chkdisk unter Windows das Problem zu "lösen". Leider scheint dies durch Löschen der fehlerhaften Dateien der Fall zu sein.


0

Ich schaffte es mit einer Kombination der ersten beiden Antworten plus pyRenamer (GUI). Unter Linux habe ich pyRenamer verwendet, um Leerzeichen in Ordnernamen (Verzeichnissen) zu reduzieren - indem ich Leerzeichen durch nichts ersetzte -, damit die anderen Programme (Glindra-Umbenennung) rekursiv funktionieren (man könnte Unterstriche setzen). Aus Dateien habe ich auch einige Windows-akzeptable Zeichen oder Wörter herausgenommen, um Platz zu sparen, und in ähnlicher Weise Leerzeichen in Dateinamen reduziert. Ich habe dann rena ausgeführt, um Nicht-Windows-Zeichen zu entfernen, auf einem Flash-Laufwerk gespeichert und dann Recuva verwendet, um einen Ordner unter Windows wiederherzustellen. Recuva gibt an, ob ein Dateipfad zu lang ist (und entfernt auch Nicht-Windows-Zeichen). Ich habe noch kein Tool gefunden, das den Pfad von Dateinamen überprüft, um festzustellen, ob sie unter der Windows-Maximalgrenze von 255 liegen (oder 240, um einen gewissen Spielraum zu lassen).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.