Vous pouvez explicitement passer une chaîne vide comme argument.
rename .old '' *.old
Et avec les sous-dossiers, find . -type d -exec rename .old '' {}/*.old \;
. {}
est le substitut de l'entrée trouvée avec find
, et \;
termine l'arglist pour la commande donnée après -exec
.
rename
est légèrement dangereux, puisque selon sa page de manuel :
rename renommera les fichiers spécifiés en remplaçant le premier occurrence de...
Il fera volontiers la mauvaise chose avec des noms de fichiers comme c.txt.parser.y
.
Voici une solution utilisant find
et bash
:
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Gardez à l'esprit que cela se cassera si un nom de fichier contient une nouvelle ligne (rare, mais pas impossible).
Si vous avez trouvé GNU, voici une solution plus solide :
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
J'utilise ceci :
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
La version Perl de rename peut supprimer une extension comme suit :
rename 's/\.txt$//' *.txt
Cela pourrait être combiné avec rechercher afin de créer également des sous-dossiers.