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.