Hallo, ich würde gerne den ersten Buchstaben alles Dateien in einem Verzeichnis mit einem Großbuchstaben versehen. Wie setze ich so etwas in einem Skript um, damit ich nicht alle Dateien einzeln umbenennen muss?
Danke
Anmeldungsdatum: Beiträge: 45 Wohnort: Hamburg |
Hallo, ich würde gerne den ersten Buchstaben alles Dateien in einem Verzeichnis mit einem Großbuchstaben versehen. Wie setze ich so etwas in einem Skript um, damit ich nicht alle Dateien einzeln umbenennen muss? Danke |
||||
Supporter, Wikiteam
Anmeldungsdatum: Beiträge: 17583 Wohnort: in deinem Browser, hier auf dem Bildschirm |
Der erste Buchstabe soll also durch den gleichen Buchstaben in groß ersetzt werden? Also die Datei test.txt soll in Test.txt umbenannt werden? Man könnte da ls nutzen für die Ausgabe. Beachte auch evtl. versteckte Dateien, die beginnen mit einem Punkt. Dann müsste man den String trennen und dann den Buchstaben durch einen großen ersetzen. Das könnte man dann in eine Liste packen und das mit mv erledigen lassen bzw. erstmal die Befehle ausgeben lasen zur Prüfung, das dann einzufügen und abzuschicken sollte nicht das Problem sein. |
||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Ich würd's nicht machen. Großbuchstaben haben alle die gleiche Höhe und sind daher optisch weniger signifikant, als Kleinbuchstaben, die sich bezüglich Ober- und Unterlängen unterscheiden können. Außerdem musst Du beim Tippen immer die Shifttaste drücken, was gerade wegen der Autovervollständigung von Dateinamen sehr lästig ist. Achso - der Beispielcode oben benennt nicht um, sondern zeigt nur die Kommandos. Das Wegen der Gefahr von Leerzeichen und üblerem in Dateinamen muss von |
||||
Anmeldungsdatum: Beiträge: 120 |
Auf die Schnelle:
Wenn die Vorschau passt, dann einfach das "#"-Zeichen in Zeile 7 entfernen. Das Script berücksichtigt keine versteckten Dateien (also die Files, die mit einem Punkt anfangen).
Liebe Grüße, frechdachs |
||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Deine Version funktioniert freilich auch - bis auf die ungerade Zahl doppelter Anführungsstriche in Zeile 6. Zum Trost, dass ich schneller und kürzer war, verrate ich Dir, wie Du EINS und ZWEI (Kopf und Rest würden ja besser passen) billiger haben kannst:
Wertvolle Gedankenstütze ist hier die bash manpage, Abschnitt Parameter Expansion - muss man lange scrollen, um da hin zu gelangen, aber es lohnt sich. ☺ |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Oder mit Python3 mit der Möglichkeit mehr als ein Verzeichnis anzugeben inkl. Prüfung, ob die Zieldatei bereits existiert:
|
||||
Anmeldungsdatum: Beiträge: 120 |
Oha! Stimmt. Habe ich auf die Schnelle übersehen...
In der Tat - das ist ein wertvoller Hinweis. Das war mir nicht bekannt. Vielen Dank! Liebe Grüße, frechdachs |
||||
Anmeldungsdatum: Beiträge: 238 Wohnort: Zwickau |
Wenn du lieber mit einer GUI arbeitest, dann kann das auch "gprename". In den entsprechenden Ordner navigieren, Reiter: Fallunterscheidung, "Nur der erste Buchstabe" auswählen, umbenennen, fertig. |
||||
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Zunächst einmal würde ich hierfür ohne Grund eher nicht zu Python greifen, da in dem Fall deutlich mehr Code nötig ist als mit den Shell-Tools. Und wenn doch, dann sollte IMHO zumindest die Möglichkeit eingebaut werden, das Skript auch aus einem anderen Verzeichnis aufzurufen, ohne dass die neuen Dateinamen im Arbeitsverzeichnis landen, statt im besagten anderen Verzeichnis. Denn das passiert bei einem simplen f.name.capitalize() leider. Damit sowas schnell auffällt, kann man mit Path.resolve() den neuen Pfad auflösen. Auch vom Code-Stil würde ich einige Dinge anders machen und lande dann in etwa bei dem hier:
Das Skript legt ein Testverzeichnis an und löscht es bewusst nicht, damit man die Ergebnisse auch nach dem Aufruf noch sehen kann. Bereits gleich benannte Dateien werden stillschweigend überschrieben, wenn sie der Version mit dem Großbuchstaben entsprechen. Es kommt auch (genau wie deine Version) mit Leerzeichen, Newlines und ähnlichen "bösen" Zeichen klar. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 45 Wohnort: Hamburg |
Danke an alle. Hat mir sehr geholfen. |
||||
Anmeldungsdatum: Beiträge: 279 |
Falls es für den einen oder anderen noch interessant ist; Im "The Linux Cookbook" bin ich auf Perl Script mit dem Namen "chcase" (http://www.primaledge.ca/chcase.html) aufmerksam geworden dass u.A. auch die gewünschte Funktion enthält. |