Eine Lösung mit find
:
Um nur Dateien umzubenennen :
find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;
Um nur Verzeichnisse umzubenennen :
find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+
Um sowohl Dateien als auch Verzeichnisse umzubenennen :
find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+
Wenn es Ihnen nichts ausmacht, ein anderes Tool zu installieren, können Sie rnm:
verwendenrnm -rs '/special/regular/g' -dp -1 *
Es wird alle Verzeichnisse/Unterverzeichnisse durchlaufen (wegen -dp -1
) und ersetzen Sie special mit normal in ihren Namen.
Die Antwort von @speakr war der Schlüssel für mich.
Wenn Sie -execdir verwenden, um sowohl Dateien als auch Verzeichnisse umzuwandeln, sollten Sie auch -type f
entfernen aus dem gezeigten Beispiel. Um es zu buchstabieren, verwenden Sie:
find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+
Ziehen Sie auch in Betracht, g
hinzuzufügen (globales) Flag für die Regex, wenn Sie alle ersetzen möchten Vorkommen von special
mit regular
in einem bestimmten Dateinamen und nicht nur beim ersten Vorkommen. Zum Beispiel:
find /your/target/path/ -execdir rename 's/special/regular/g' '{}' \+
transformiert special-special.jpg
bis regular-regular.jpg
. Ohne das globale Flag erhalten Sie am Ende regular-special.jpg
.
FYI:GNU Rename ist nicht standardmäßig auf Mac OSX installiert. Wenn Sie den Homebrew-Paketmanager verwenden, brew install rename
wird Abhilfe schaffen.
Versuchen Sie dies (benötigen Sie bash --version
>=4):
shopt -s globstar
rename -n 's/special/regular/' **
Entfernen Sie den -n
wechseln, wenn Ihre Tests OK sind
Es gibt andere Tools mit demselben Namen, die dies möglicherweise können oder auch nicht sei vorsichtig.
Wenn Sie den folgenden Befehl ausführen (GNU
)
$ file "$(readlink -f "$(type -p rename)")"
und Sie haben ein Ergebnis wie
.../rename: Perl script, ASCII text executable
und enthält nicht:
ELF
dann scheint dies das richtige Werkzeug zu sein =)
Wenn nicht, um es zum Standard zu machen (normalerweise bereits der Fall) auf Debian
und Ableitungen wie Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(ersetzen Sie /path/to/rename
zum Pfad Ihres perl's rename
Befehl.
Wenn Sie diesen Befehl nicht haben, durchsuchen Sie Ihren Paketmanager, um ihn zu installieren, oder führen Sie dies manuell durch
Last but not least wurde dieses Tool ursprünglich von Larry Wall, dem Vater von Perl, geschrieben.