Puoi passare esplicitamente una stringa vuota come argomento.
rename .old '' *.old
E con le sottocartelle, find . -type d -exec rename .old '' {}/*.old \; . {} è il sostituto della voce trovata con find e \; termina l'arglist per il comando dato dopo -exec .
rename è leggermente pericoloso, poiché secondo la sua pagina di manuale:
rename rinominerà i file specificati sostituendo il primo occorrenza di...
Farà felicemente la cosa sbagliata con nomi di file come c.txt.parser.y .
Ecco una soluzione usando find e bash :
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Tieni presente che questo si interromperà se un nome file contiene una nuova riga (raro, ma non impossibile).
Se hai GNU find, questa è una soluzione più solida:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Io uso questo:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
La versione Perl di rename può rimuovere un'estensione come segue:
rename 's/\.txt$//' *.txt
Questo potrebbe essere combinato con find per creare anche sottocartelle.