Sie erhalten eine Umbenennung für Verzeichnisnamen, da der find
Befehl den vollständigen Pfad der Dateinamen zurückgibt. Anschließend wird der Umbenennungsbefehl ausgeführt. Wenn Sie eine Datei im Verzeichnis haben DIR1/FILE
, wird sie umbenannt in, dir1/file
während Sie das Verzeichnis nicht umbenennen möchten.
Hier ist der Befehl, nur Dateinamen umzubenennen:
find . -type f -exec rename -n 's:([^/]*$):lc($1):e' {} +
In obigem Befehl ([^/]*$)
stimmt nur der letzte Teil des Pfads überein, der keine /
Klammern enthält, (...)
die den übereinstimmenden Teil als Gruppe von Übereinstimmungen bilden. Übersetzen Sie dann den übereinstimmenden Teil ( $1
ist der Index der ersten übereinstimmenden Gruppe) mit lc()
Funktion in Kleinbuchstaben .
Bei dem müssen Sie die -n
Option zum Umbenennen aktueller Dateien nutzen.
-exec ... {} +
ist für Befehle, die zu einem Zeitpunkt mehr als eine Datei nehmen (zcat
,stat
,ls
). Die gefundenen Dateienfind
werden wie einxargs
Befehl miteinander verkettet . Dies bedeutet weniger Ausweichen und kann bei kleinen Operationen eine erhebliche Beschleunigung bedeuten. [ Antwort von @Oli ]