{"id":2326,"date":"2011-05-14T17:18:11","date_gmt":"2011-05-14T15:18:11","guid":{"rendered":"https:\/\/www.gambaru.de\/blog\/?p=2326"},"modified":"2020-01-05T01:45:51","modified_gmt":"2020-01-05T00:45:51","slug":"mehrere-dateien-umbenennen-mit-bash-und-vim","status":"publish","type":"post","link":"https:\/\/gambaru.de\/blog\/2011\/05\/14\/mehrere-dateien-umbenennen-mit-bash-und-vim\/","title":{"rendered":"Mehrere Dateien umbenennen mit Bash und Vim"},"content":{"rendered":"<p>Folgendes Problem: Viele, viele Dateien sollen umbenannt werden. Richtig praktisch f\u00fcr eine solche Aufgabe fand ich bisher nur das Programm <code>Bulk-Renamer<\/code>, welches Bestandteil des Dateimanagers <a href=\"http:\/\/thunar.xfce.org\/\">Thunar<\/a> ist. Sucht man im Internet weiter, findet man schnell weitere grafische L\u00f6sungsm\u00f6glichkeiten unter Linux.<br \/>\nIch m\u00f6chte die Anzahl solcher Zubeh\u00f6rprogramme m\u00f6glichst klein halten und unabh\u00e4ngig von Desktopumgebungen oder Programmbibliotheken sein. Gerade ein solches Problem ruft f\u00f6rmlich nach einer schnellen, nicht-grafischen L\u00f6sung: <strong>Der Shell<\/strong><br \/>\nBei Debian und Ubuntu kann man standardm\u00e4\u00dfig auf die Bash zur\u00fcckgreifen. Einen m\u00f6glichen Ansatz zum mehrfachen Umbenennen von Dateien bietet eine Schleifenkonstruktion, die ich schon einmal in Zusammenhang mit dem massenhaften Umwandeln von Bild- und Videodateien in freie Formate <a href=\"https:\/\/www.gambaru.de\/blog\/?p=1396\">vorgestellt habe<\/a>.<\/p>\n<pre class=\"brush:shell\">#!\/bin\/bash\ncounter=123\nfor i in *.jpg; do\n    mv -i \"$i\" \"Sommer_Urlaub_$counter\".jpg\n    let counter+=1\ndone<\/pre>\n<p>Dieses kleine Skript muss nur noch abgespeichert und mit <code>chmod+x<\/code> ausf\u00fchrbar gemacht und in dem betreffenden Bilderverzeichnis ausgef\u00fchrt werden. Dabei werden alle *.jpg Dateien der Reihe nach mit dem GNU Kommando <code>mv<\/code> in Sommer_Urlaub_123.jpg usw. umbenannt, wobei der Z\u00e4hler bei 123 anf\u00e4ngt und dann am Ende der Schleife jeweils um 1 hochgez\u00e4hlt wird.<\/p>\n<h2>VIM - VI improved<\/h2>\n<p>Zuerst denkt man, wie kann ein Texteditor wie <a href=\"http:\/\/www.vim.org\/\">vim<\/a> schon gro\u00dfartig beim Umbenennen von Dateien helfen? Ich muss zugeben, im Laufe der Zeit hat mich vim immer mehr begeistert und nachdem ich mir schon das Buch Vim 7 - Ge-Packt von Reinhard Wobst gekauft habe, st\u00f6bere ich auch ab und zu im <a href=\"http:\/\/vim.wikia.com\">Vim Wiki<\/a> herum.<br \/>\nGerade zum Thema \"Mehrere Dateien umbenennen\" gibt es schon einen englischen Eintrag namens <a href=\"http:\/\/vim.wikia.com\/wiki\/Bulk_rename_files_with_Vim\">Bulk rename files<\/a>.<br \/>\nUm mehrere Dateien z.B. von Gro\u00dfschreibung zu Kleinschreibung zu transformieren, sendet man an vim einfach eine Liste mit allen in einem bestimmten Verzeichnis vorhandenen Dateinamen.<\/p>\n<p><code>ls | vim -<\/code><\/p>\n<p>Dadurch k\u00f6nnte es in Vim vielleicht so aussehen:<\/p>\n<p>SOMMER_URLAUB_CIMG074.jpg<br \/>\nSOMMER_URLAUB_CIMG075.jpg<br \/>\nSOMMER_URLAUB_CIMG076.jpg<br \/>\nSOMMER_URLAUB_CIMG077.jpg<br \/>\nusw.<\/p>\n<p>Um diese Dateinamen z.B alle in Kleinschreibung abzu\u00e4ndern, muss folgender Suche-und-Ersetze-Befehl in vims Kommandomodus eingegeben werden.<\/p>\n<p><code>:%s\/.*\/mv -i \"&amp;\"  \\L\"&amp;\"\/g<\/code><\/p>\n<p><strong>Ergebnis<\/strong><br \/>\nmv -i \"SOMMER_URLAUB_CIMG074.jpg\" \"sommer_urlaub_cimg074.jpg\"<br \/>\nmv -i \"SOMMER_URLAUB_CIMG075.jpg\" \"sommer_urlaub_cimg075.jpg\"<br \/>\nmv -i \"SOMMER_URLAUB_CIMG076.jpg\" \"sommer_urlaub_cimg076.jpg\"<br \/>\nmv -i \"SOMMER_URLAUB_CIMG077.jpg\" \"sommer_urlaub_cimg077.jpg\"<\/p>\n<p>Bisher wurden die Dateien vollkommen unber\u00fchrt gelassen. Alles hat sich in Vim abgespielt. Mit der Taste \"u\" kann die Aktion r\u00fcckg\u00e4ngig und mit STRG+R das R\u00fcckg\u00e4ngige r\u00fcckg\u00e4ngig gemacht werden.<br \/>\nWirklich ausgef\u00fchrt wird die Umbenennung erst, wenn Zeile f\u00fcr Zeile an die Bash als Befehl \u00fcbergeben wird.<br \/>\nDas l\u00e4sst sich durch<\/p>\n<p><code>:w !sh<\/code><br \/>\noder<br \/>\n<code>:%!bash<\/code><\/p>\n<p>erreichen.<br \/>\nAuch in Vim l\u00e4sst sich ein Z\u00e4hler einbauen. Der allgemeine Ansatz scheint zu sein, eine <a href=\"http:\/\/vim.wikia.com\/wiki\/Substitute_with_incrementing_numbers\">separate Funktion<\/a> zu schreiben, welche wiederum eine Zahl fortlaufend erh\u00f6ht. F\u00fcr meinen Geschmack habe ich dadurch in dem konkreten Beispiel gegen\u00fcber der for Schleife nichts gewonnen.<br \/>\nWarum ich Vim als Alternative angef\u00fchrt habe, ist vielmehr der Vorteil, dass man alles in Ruhe vorher betrachten und pr\u00fcfen kann, bevor man die Ver\u00e4nderung auf seine Dateien losl\u00e4sst. Au\u00dferdem bietet Vim z.B. die praktische M\u00f6glichkeit mit dem visuellen Modus nur ein paar Dateien auszuw\u00e4hlen und den Befehl hierauf anzuwenden.<br \/>\nDazu gen\u00fcgt es \"v\" zu dr\u00fccken, mit den Cursortasten den Bereich zu selektieren, dann wieder in den Kommandomodus mit \":\" wechseln und es erscheint automatisch schon<\/p>\n<p><code>:'&lt;,'&gt;<\/code><\/p>\n<p>Das erg\u00e4nzt zu<\/p>\n<p><code>:'&lt;,'&gt; !bash<\/code><\/p>\n<p>und nur der ausgew\u00e4hlte Teil wird auch tats\u00e4chlich ausgef\u00fchrt. Richtig interessant wird es aber erst mit Regul\u00e4ren Ausdr\u00fccken. Wer also z.B. nur den Buchstaben U, nach dem ersten Unterstrich gro\u00df oder klein schreiben m\u00f6chte oder nur bestimmte Muster ersetzen m\u00f6chte, kommt an den regular expressions nicht vorbei. Nat\u00fcrlich ist das ein Feature jeder guten Programmier- und Skriptsprache und nicht auf Vim beschr\u00e4nkt, welches in Sachen Regul\u00e4re Ausdr\u00fccke sowieso einen besonderen Weg gegangen ist.<br \/>\nIch denke f\u00fcr einen so einfachen Fall bleibe ich weiterhin bei der Bash. Auch die Alternative <code>rename<\/code> sollte man sich anschauen. Wer aber bisher dachte, dass Texteditoren nur zum \u00c4ndern von Konfigurationsdateien taugen, kennt jetzt zumindest einen Tipp mehr aus dem umfangreichen <a href=\"http:\/\/vim.wikia.com\/\">Vim Wiki<\/a> und es gibt dort noch viele, viele mehr. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Folgendes Problem: Viele, viele Dateien sollen umbenannt werden. Richtig praktisch f\u00fcr eine solche Aufgabe fand ich bisher nur das Programm Bulk-Renamer, welches Bestandteil des Dateimanagers Thunar ist. Sucht man im Internet weiter, findet man schnell weitere grafische L\u00f6sungsm\u00f6glichkeiten unter Linux. Ich m\u00f6chte die Anzahl solcher Zubeh\u00f6rprogramme m\u00f6glichst klein halten und unabh\u00e4ngig von Desktopumgebungen oder Programmbibliotheken &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gambaru.de\/blog\/2011\/05\/14\/mehrere-dateien-umbenennen-mit-bash-und-vim\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eMehrere Dateien umbenennen mit Bash und Vim\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[30,53,202,211],"_links":{"self":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/2326"}],"collection":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/comments?post=2326"}],"version-history":[{"count":1,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/2326\/revisions"}],"predecessor-version":[{"id":11121,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/2326\/revisions\/11121"}],"wp:attachment":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/media?parent=2326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/categories?post=2326"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/tags?post=2326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}