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.