Cambiar el nombre de varios archivos en shell

Tengo varios archivos en un directorio, por ejemplo: linux_file1.mp4 , linux_file2.mp4 y así sucesivamente. ¿Cómo muevo estos archivos, usando shell, para que los nombres sean file1.mp4 , file2.mp4 y así sucesivamente? Tengo alrededor de 30 archivos que quiero mover al nuevo nombre.

Me gusta mmv para este tipo de cosas

 mmv 'linux_*' '#1' 

Pero también puedes usar rename . Tenga en cuenta que comúnmente hay dos comandos de rename con una syntax muy diferente. Uno está escrito en Perl, el otro se distribuye con util-linux, por lo que los distingo como “perl rename” y “util rename” a continuación.

Con el cambio de nombre de Perl:

 rename 's/^linux_//' linux_*.mp4 

Como cweiske señaló correctamente.

Con util renombrar:

 rename linux_ '' linux_*.mp4 

¿Cómo puedes saber qué cambio de nombre tienes? Intenta ejecutar el rename -V ; si su versión es util renombrar, imprimirá el número de versión y, si se trata de perl rename, informará inofensivamente y mostrará una opción desconocida y mostrará el uso.

Si no tiene ni rename ni mmv y no quiere o no puede instalarlos, puede lograr esto con un código de shell simple:

 for file in linux_*.mp4 ; do mv "$file" "${file#linux_}" ; done 

Esta syntax funcionará con cualquier POSIX sh conforme a XPG4 o posterior, que esencialmente son todas conchas en estos días.

 $ rename 's/linux_//' linux_*.mp4 

Una manera nativa simple de hacerlo, con el recorrido del directorio :

 find -type f | xargs -I {} mv {} {}.txt 

Renombrará cada archivo en su lugar agregando extensión .txt al final.

Y una forma más general genial con la paralelización :

 find -name "file*.p" | parallel 'f="{}" ; mv -- {} ${f:0:10}trump${f:4}' 

Pude lograr reemplazar nombres de archivos dentro de directorios mediante la combinación de respuestas @dtrckd y @Sorpigal.

 for file in `find -name "linux_*.mp4"`; do mv "$file" "${file/linux_/}" ; done