Sie können explizit einen leeren String als Argument übergeben.
rename .old '' *.old
Und mit Unterordnern find . -type d -exec rename .old '' {}/*.old \; . {} ist der Ersatz für den mit find gefundenen Eintrag , und \; beendet die Argumentliste für den nach -exec angegebenen Befehl .
rename ist etwas gefährlich, da laut seiner Handbuchseite:
rename benennt die angegebenen Dateien um, indem das erste ersetzt wird Auftreten von...
Mit Dateinamen wie c.txt.parser.y macht es gerne das Falsche .
Hier ist eine Lösung mit find und bash :
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Denken Sie daran, dass dies nicht funktioniert, wenn ein Dateiname einen Zeilenumbruch enthält (selten, aber nicht unmöglich).
Wenn Sie GNU find haben, ist dies eine solidere Lösung:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Ich benutze das:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
Die Perl-Version von rename kann eine Erweiterung wie folgt entfernen:
rename 's/\.txt$//' *.txt
Dies könnte mit find kombiniert werden, um auch Unterordner zu erstellen.