Wenn Sie auch Dateien in Unterverzeichnissen umbenennen müssen und Ihr Prädikat find
unterstützt -execdir
, können Sie dies tun
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Vielen Dank an @glenn jackman , der mir eine -depth
Option vorgeschlagen find
und mich zum Nachdenken gebracht hat.
Beachten Sie, dass auf einigen Systemen (einschließlich GNU / Linux-Systemen) find
möglicherweise keine Dateien gefunden werden, deren Name Leerzeichen sowie Folgen von Bytes enthält, die keine gültigen Zeichen bilden (typisch für Mediendateien mit Namen, deren Zeichensatz Nicht-ASCII-Zeichen enthält) vom Gebietsschema verschieden). Wenn Sie das Gebietsschema auf C
(wie in LC_ALL=C find...
) setzen, wird das Problem behoben.
find -maxdepth 1
, um genau das zu tun, wonach das OP gefragt hat, um den aktuellen Ordner zu bearbeiten.-depth
Option find , und Sie können die loswerdensort
.-name '* *'
zu-name '*_*'
und wechseln"${1// /_}"
zu"${1//_/.}"
bash
der Manpage von finden.In jeder Shell können Sie die Dateien durchlaufen, deren Name ein Leerzeichen enthält. Das Ersetzen der Leerzeichen durch Unterstriche ist in bash, ksh und zsh mit dem
${VARIABLE//PATTERN/REPLACEMENT}
Konstrukt einfach .Unter Debian, Ubuntu und Derivaten können Sie Perl verwenden
rename
(andere Distributionen liefern ein anderes Programm alsrename
, und dieses Programm ist hier nicht hilfreich).Eine obligatorische zsh-Lösung:
Eine obligatorische POSIX-Lösung:
quelle
s/…/…/g
bedeutet, alle Vorkommen zu ersetzen. Es ist nicht sehr gut im Handbuch erklärt . Wenn Sie Verzeichnisse umbenennen möchten, gibt es verschiedene Möglichkeiten. Suchen Sie danach (ich glaube, ich habe es bereits gesehen), und stellen Sie eine neue Frage, wenn Sie es nicht finden können._MG_blah.JPG
in umzubenennenIMG_blah.JPG
.Sie können dafür verwenden
rename
(hier unter der Annahme, dass es sich um das vonutil-linux
und nicht um das von handeltperl
):Dies findet alle Dateien und Verzeichnisse im Namen und ersetzt das Leerzeichen durch einen Unterstrich. Da die Glob-Dateiabstimmung verwendet wird, müssen Sie sich zunächst im richtigen Verzeichnis befinden.
Wenn Sie rekursive Übereinstimmungen durchführen möchten, können Sie dies tun, müssen dies jedoch möglicherweise
rename
einige Male ausführen , um Elemente in Verzeichnissen abzufangen, die selbst umbenannt wurden:quelle
rename
Benennt die angegebenen Dateien um, indem das erste Vorkommen von in ihrem Namen durch" in "ersetzt wird. Dies funktioniert also nur für Dateien mit einem einzelnen Leerzeichen im Namen. (Sie könntenrename
eine Schleife aufrufen , aber es ist hier nicht wirklich das richtige Werkzeug.)Eine andere Option wäre
mmv
, wenn installiert.quelle
_
, es funktioniert nicht bei Namen mit mehreren Leerzeichen.Unter Debian / Ubuntu, basierend auf den Antworten von Caleb und Gilles, funktionierte dies für mich, um Dateien rekursiv umzubenennen:
Hinweis: Um eine Vorschau zu erhalten, welche Dateien wie umbenannt werden, verwenden Sie den
-n
Schalter mitrename
:Noch ein Hinweis: Einstellung
globstar
Marken**
entsprechen Dateien in allen Unterverzeichnissen, also wenn nur aktuelles Verzeichnis gewünscht wird, nicht Satz globstar oder verwenden*
statt**
.Noch eine Anmerkung: Der
rename
Befehl muss für Dateien mit mehreren Vorkommen des Suchbegriffs mehrmals ausgeführt werden.quelle
a b/c d
zua_b/c_d
nicht funktionieren würde, müssen Sie zunächst umbenennena b/c d
zua b/c_d
, und danna b
aufa_b
).rename
Befehl zweimal auszuführen ?**
Dotfiles ausschließt und Symlinks durchläuft.Wenn Sie bei regulären Ausdrücken kein Flash sind (ich bin es nicht!) Und Sie Anwendungen ausführen können, die für kde entwickelt wurden (entweder verwenden Sie kde - k desktop oder Sie haben seine Bibliotheken installiert), dann ist krename ein großartiges grafisches Dienstprogramm, das Mit dieser Option können Sie das Vorher und Nachher anzeigen, bevor Sie Änderungen vornehmen. Es bietet eine Reihe einfacher Transformationen als Optionen und unterstützt auch reguläre Ausdrücke. Sie können sogar mehrere sequentielle Transformationen in einem Umbenennungsvorgang kombinieren, sodass Sie nicht eine einzige komplexe Transformation entwerfen müssen, die dies alles auf einmal erledigt. Es besteht auch die Möglichkeit, dieselben Dateien nach einer Umbenennung weiter umzubenennen.
Ich benutze es nicht so oft, aber wenn ich es tue, wird es wirklich schnell und einfach erledigt. Es ist sehr praktisch, wenn Sie verschiedene heruntergeladene Mediendateien umbenennen, damit Sie sie auf Ihrem System einheitlich verwalten können. Es ist hilfreich, das Handbuch zu krename separat herunterzuladen, damit Sie während der Verwendung des Programms darauf zugreifen können.
http://www.krename.net/
quelle