Puede pasar explícitamente una cadena vacía como argumento.
rename .old '' *.old
Y con subcarpetas, find . -type d -exec rename .old '' {}/*.old \;
. {}
es el sustituto de la entrada encontrada con find
y \;
termina la lista de argumentos para el comando dado después de -exec
.
rename
es ligeramente peligroso, ya que según su página de manual:
renombrar cambiará el nombre de los archivos especificados reemplazando el primero aparición de...
Felizmente hará lo incorrecto con nombres de archivo como c.txt.parser.y
.
Aquí hay una solución usando find
y bash
:
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Tenga en cuenta que esto fallará si un nombre de archivo contiene una nueva línea (raro, pero no imposible).
Si tiene GNU find, esta es una solución más sólida:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Yo uso esto:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
La versión Perl de cambiar el nombre puede eliminar una extensión de la siguiente manera:
rename 's/\.txt$//' *.txt
Esto podría combinarse con buscar para hacer también subcarpetas.