/ / Recursivamente cambia las extensiones de archivo en Bash [duplicado] - linux, bash, shell, sh

Cambia recursivamente las extensiones de archivo en Bash [duplicado] - linux, bash, shell, sh

Quiero iterar recursivamente a través de un directorio y cambiar la extensión de todos los archivos de una extensión determinada, digamos .t1 a .t2. ¿Cuál es el comando de bash para hacer esto?

Respuestas

115 para la respuesta № 1

Si tiene renombrado disponible entonces use:

find . -name "*.t1" -exec rename "s/.t1$/.t2/" "{}" ;

Si el cambio de nombre no está disponible, use:

find . -name "*.t1" -exec bash -c "mv "$1" "${1%.t1}".t2" - "{}" ;

7 para la respuesta № 2

Si tu versión de bash apoya el globstar Opción (versión 4 o posterior):

shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done

5 para la respuesta № 3

O simplemente puede instalar el mmv ordena y haz:

mmv "*.t1" "#1.t2"

aquí #1 es la primera parte global, es decir, la * en *.t1 .

O en cosas de puro bash, una forma simple sería:

for f in *.t1; do
mv "$f" "${i%.t1}.t2"
done

(es decir.: for puede listar archivos sin la ayuda de un comando externo como ls o find)

HTH


2 para la respuesta № 4

Haría de esta manera en bash:

for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done

EDITAR: mi error: no es recursivo, aquí está mi manera de cambiar el nombre de archivo recursivo:

for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done