GNU/Linux >> Tutoriales Linux >  >> Linux

Cambiar recursivamente las extensiones de archivo en Bash

Ninguna de las soluciones sugeridas funcionó para mí en una instalación nueva de Debian 14. Esto debería funcionar en cualquier Posix/MacOS

find ./ -depth -name "*.t1" -exec sh -c 'mv "$1" "${1%.t1}.t2"' _ {} \;

Todos los créditos a:https://askubuntu.com/questions/35922/how-do-i-change-extension-of-multiple-files-recursively-from-the-command-line


Si su versión de bash soporta el globstar opción (versión 4 o posterior):

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

Usar:

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

Si tienes rename disponible entonces usa uno de estos:

find . -name '*.t1' -exec rename .t1 .t2 {} +
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' +

Lo 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 forma de cambiar el nombre de archivo recursivo:

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

Linux
  1. Cómo encontrar un archivo en Linux en todos los directorios recursivamente

  2. El Bash'?

  3. ¿Encontrar los archivos más grandes recursivamente?

  4. ¿Buscar el archivo de registro de Firefox?

  5. buscar y copiar archivos usando Bash

Comando de fuente Bash

Bash:Agregar al archivo

35 ejemplos de secuencias de comandos Bash

Cómo cambiar automáticamente el fondo de GNOME en intervalos usando BASH

Cómo excluir una extensión de archivo específica al copiar archivos de forma recursiva

Cómo encontrar archivos con docenas de criterios con el comando Bash Find