Ich verwende dies in einem Kundenverzeichnis, um Dateien umzubenennen, wobei der erste Buchstabe jedes Wortes gemäß seiner Anfrage großgeschrieben wird:
rename 's/\b(\w)/\u$1/g' *
Das funktioniert gut, aber es wird auch der erste Buchstabe der Erweiterung großgeschrieben. Ich verwende dies, um Folgendes zu beheben:
rename 's/\.Txt$/.txt/' *.Txt
Das funktioniert in Ordnung, wenn die meisten Dateien in einem Ordner dieselbe Erweiterung haben (im Allgemeinen wahr), ist aber ein Schmerz, wenn sie sehr gemischt sind.
Um dieses Problem zu umgehen, habe ich ein kleines Skript erstellt, das so aussieht (nicht lachen!):
#!/bin/bash
rename 's/\.Txt$/.txt/' *.Txt
rename 's/\.Doc$/.doc/' *.Doc
rename 's/\.Docx$/.docx/' *.Docx
...
rename 's/\.Xlsx$/.xlsx/' *.Xlsx
Ich ignoriere die Fehler 'Kann * .Txt * .txt nicht umbenennen: Keine solche Datei oder kein solches Verzeichnis' und wenn ich eine fehlende Erweiterung finde, füge ich diese Zeile einfach meinem Skript hinzu.
Ich denke nicht, dass dies von Bedeutung sein wird, aber die Dateien befinden sich auf einem Windows-Server-Fileshare, aber ich greife mit Ubuntu 16.04LTS darauf zu. Wenn es wichtig ist, kann ich sie zuerst auf mein lokales Laufwerk kopieren, einen Befehl in Ubuntu ausführen und die Dateien bei Bedarf zurück verschieben.
Gibt es eine Möglichkeit, den ersten Umbenennungsbefehl zu ändern, um die Erweiterungen zu ignorieren und als Kleinbuchstaben zu belassen? Kann ich den neuen Befehl in einem übergeordneten Verzeichnis ausführen und ihn durch alle Unterverzeichnisse rekursieren lassen?
filename.txt
werdenFilename.txt
, richtig? Kannst du ein Beispiel geben ?