Cómo usar el comando de cambio de nombre en Linux

Familiarícese con la potencia de cambio de nombre de archivos del mundo Linux y déjele a mv, ya usted mismo, un descanso. Cambiar el nombre es flexible, rápido y, a veces, incluso más fácil. Aquí hay un tutorial de este poderoso comando.

¿Qué pasa con mv?

No hay nada de malo en mv. El comando hace un buen trabajo, y se encuentra en todas las distribuciones de Linux, en macOS y en otros sistemas operativos similares a Unix. Entonces siempre está disponible. Pero a veces solo necesitas una excavadora, no una pala.

El comando mv tiene un propósito en la vida y es mover archivos. Es un efecto secundario feliz que se puede usar para mover un archivo existente a un nuevo archivo, con un nuevo nombre. El efecto neto es cambiar el nombre del archivo, para que obtengamos lo que queremos. Pero mv no es una herramienta de cambio de nombre de archivos dedicada.

Cambiar el nombre de un solo archivo con mv

Para usar mv para cambiar el nombre de un archivo, escriba mv, un espacio, el nombre del archivo, un espacio y el nuevo nombre que desea que tenga el archivo. Luego presione Enter.

Puede utilizar ls para comprobar que se ha cambiado el nombre del archivo.

mv oldfile.txt newfile.txt
ls *.txt

mv oldfile.txt newfile.txt en una ventana de terminal

Cambiar el nombre de varios archivos con mv

Las cosas se complican cuando desea cambiar el nombre de varios archivos. mv no tiene capacidad para cambiar el nombre de varios archivos. Debes recurrir al uso de algunos trucos ingeniosos de Bash. Eso está bien si conoce algún fu de línea de comandos de grado medio, pero la complejidad de cambiar el nombre de varios archivos con mv contrasta con la facilidad de usar mv para cambiar el nombre de un solo archivo.

Las cosas se intensifican rápidamente.

Digamos que tenemos un directorio con una variedad de archivos, de diferentes tipos. Algunos de estos archivos tienen una extensión «.prog». Queremos cambiarles el nombre en la línea de comandos para que tengan una extensión «.prg».

¿Cómo logramos que mv haga eso por nosotros? Echemos un vistazo a los archivos.

ls *.prog -l

ls * .prog -l en una ventana de terminal

Aquí hay una forma de hacerlo que no recurre a escribir un archivo de script Bash real.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

para f en * .prog;  hacer mv -

¿Funcionó? Revisemos los archivos y veamos.

ls *.pr*

ls * .pr * en una ventana de terminal

Entonces, sí, funcionó. Ahora todos son archivos «.prg» y no hay archivos «.prog» en el directorio.

¿Lo que acaba de suceder?

¿Qué hizo realmente ese comando largo? Vamos a analizarlo.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

La primera parte inicia un ciclo que procesará cada archivo «.prog» en el directorio, a su vez.

  Cómo usar la WebUI de Deluge en Linux

La siguiente parte dice lo que hará el procesamiento. Utiliza mv para mover cada archivo a un nuevo archivo. El nuevo archivo se nombrará con el nombre del archivo original excluyendo la parte «.prog». En su lugar, se utilizará una nueva extensión de «.prg».

Tiene que haber una forma más sencilla

Definitivamente. Es el comando de cambio de nombre.

rename no forma parte de una distribución estándar de Linux, por lo que deberá instalarlo. También tiene un nombre diferente en diferentes familias de Linux, pero todas funcionan de la misma manera. Solo tendrá que sustituir el nombre de comando apropiado de acuerdo con el sabor de Linux que esté usando.

en las distribuciones de Ubuntu y derivadas de Debian instalas cambiar el nombre de esta manera:

sudo apt-get install rename

sudo apt-get install renombrar en una ventana de terminal

En las distribuciones derivadas de Fedora y RedHat, instala un prename así. Tenga en cuenta la «p» inicial, que significa Perl.

sudo dnf install prename

sudo dnf instalar prename en una ventana de terminal

Para instalarlo en Manjaro Linux use el siguiente comando. Tenga en cuenta que el comando de cambio de nombre se llama perl-rename.

sudo pacman -Syu perl-rename

sudo pacman -Syu perl-rename en una ventana de terminal

Hagámoslo de nuevo

Y esta vez usaremos el cambio de nombre. Retrocederemos el reloj para tener un conjunto de archivos «.prog».

ls *.prog

ls * .prog en una ventana de terminal

Ahora usemos el siguiente comando para cambiarles el nombre. Luego comprobaremos con ls si funcionó. Recuerde sustituir el cambio de nombre por el nombre de comando apropiado para su Linux si no está usando Ubuntu o un Linux derivado de Debian.

rename 's/.prog/.prg/' *.prog
ls *.pr*

cambiar el nombre de 's / .prog / .prg /' * .prog en una ventana de terminal

Eso funcionó, ahora son todos archivos «.prg» y no quedan archivos «.prog» en el directorio.

¿Qué sucedió en este momento?

Expliquemos ese poco de magia, en tres partes.

La primera parte es el nombre del comando, renombrar (o prename o perl-rename, para las otras distribuciones).

La última parte es * .prog, que le dice al cambio de nombre que opere en todos los archivos «.prog».

La parte del medio define el trabajo que queremos hacer en cada nombre de archivo. La s significa sustituto. El primer término (.prog) es lo que buscará el cambio de nombre en cada nombre de archivo y el segundo término (.prg) es con el que se sustituirá.

La parte central del comando, o expresión central, es un Perl ‘expresión regular‘y es lo que le da flexibilidad al comando de cambio de nombre.

Cambiar otras partes de un nombre de archivo

Hemos cambiado las extensiones de nombre de archivo hasta ahora, modifiquemos otras partes de los nombres de archivo.

En el directorio hay muchos archivos de código fuente C. Todos los nombres de archivo tienen el prefijo «slang_». Podemos comprobar esto con ls.

ls sl*.c

ls sl * .c en una ventana de terminal

Vamos a reemplazar todas las apariciones de «slang_» con «sl_». El formato del comando ya nos es familiar. Solo estamos cambiando el término de búsqueda, el término de reemplazo y el tipo de archivo.

rename 's/slang_/sl_' *.c

cambiar el nombre de 's / slang_ / sl_' * .c en una ventana de terminal

Esta vez buscamos archivos «.c» y buscamos «slang_». Siempre que se encuentra «slang_» en un nombre de archivo, se sustituye por «sl_».

  Cómo utilizar la interfaz web de PocketCasts en Linux

Podemos verificar el resultado de ese comando repitiendo el comando ls de arriba con los mismos parámetros:

ls sl*.c

ls sl * .c en una ventana de terminal

Eliminar parte de un nombre de archivo

Podemos eliminar una parte de un nombre de archivo sustituyendo el término de búsqueda por nada.

ls *.c
rename 's/sl_//' *.c
ls *.c

cambiar el nombre de 's / sl _ //' * .c en una ventana de terminal

Podemos ver en el comando ls que nuestros archivos «.c» están todos antepuestos con «sl_». Deshagámonos de eso por completo.

El comando de cambio de nombre sigue el mismo formato que antes. Buscaremos archivos “.c”. El término de búsqueda es «sl_», pero no hay ningún término de sustitución. Dos barras invertidas sin nada entre ellas no significan nada, una cadena vacía.

rename procesará cada archivo «.c» a su vez. Buscará «sl_» en el nombre del archivo. Si se encuentra, no será reemplazado por nada. En otras palabras, se elimina el término de búsqueda.

El segundo uso del comando ls confirma que el prefijo «sl_» se ha eliminado de todos los archivos «.c».

Limitar los cambios a partes específicas de los nombres de archivo

Usemos ls para buscar archivos que tengan la cadena «param» en su nombre de archivo. Luego usaremos el cambio de nombre para reemplazar esa cadena con la cadena «parámetro». Usaremos ls una vez más para ver el efecto que ha tenido el comando de cambio de nombre en esos archivos.

ls *param*
rename 's/param/parameter' *.c
ls *param*

cambiar el nombre de 's / param / parameter' * .c en una ventana de terminal

Se encuentran cuatro archivos que tienen «param» en su nombre de archivo. param.c, param_one.c y param_two.c tienen «param» al comienzo de su nombre. third_param.c tiene «param» al final de su nombre, justo antes de la extensión.

El comando de cambio de nombre buscará «param» en todas partes del nombre del archivo y lo reemplazará con «parámetro» en todos los casos.

El segundo uso del comando ls nos muestra que eso es exactamente lo que sucedió. Si «param» estaba al principio o al final del nombre de archivo, se ha reemplazado por «parámetro».

Podemos usar los metacaracteres de Perl para refinar el comportamiento de la expresión del medio. Los metacaracteres son símbolos que representan posiciones o secuencias de caracteres. Por ejemplo, ^ significa «comienzo de una cadena», $ significa «final de una cadena» y. significa cualquier carácter individual (aparte de un carácter de nueva línea).

Vamos a utilizar el inicio del metacarácter de cadena (^) para restringir nuestra búsqueda al inicio de los nombres de archivo.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

cambiar el nombre de 's / ^ parámetro / valor /' * .c en una ventana de terminal

Los archivos que cambiamos de nombre anteriormente se enumeran, y podemos ver que la cadena «parámetro» está al principio de tres nombres de archivo y al final de uno de los nombres de archivo.

Nuestro comando de cambio de nombre utiliza el metacarácter del inicio de la línea (^) antes del término de búsqueda «parámetro». Esto le dice a rename que solo considere que se ha encontrado el término de búsqueda si está al comienzo del nombre del archivo. El «parámetro» de la cadena de búsqueda se ignorará si se encuentra en cualquier otro lugar del nombre del archivo.

  Cómo utilizar el lector de RSS Liferea en Linux

Verificando con ls, podemos ver que el nombre de archivo que tenía «parámetro» al final del nombre de archivo no ha sido modificado, pero los tres nombres de archivo que tenían «parámetro» al principio de sus nombres han tenido la cadena de búsqueda reemplazada por el sustituto término «valor».

El poder del cambio de nombre reside en el poder de Perl. Toda la poder de Perl está a tu disposición.

Búsqueda con agrupaciones

renombrar tiene aún más trucos bajo la manga. Consideremos el caso en el que puede tener archivos con cadenas similares en sus nombres. No son exactamente las mismas cadenas, por lo que una simple búsqueda y sustitución no funcionará aquí.

En este ejemplo usamos ls para verificar qué archivos tenemos que comienzan con «str». Hay dos de ellos, string.cy strangle.c. Podemos cambiar el nombre de ambas cadenas a la vez mediante una técnica llamada agrupación.

La expresión central de este comando de cambio de nombre buscará cadenas dentro de los nombres de archivo que tengan la secuencia de caracteres «Stri» o «Stra», donde esas secuencias son seguidas inmediatamente por «ng». En otras palabras, nuestro término de búsqueda buscará «cadena» y «estrangulamiento». El término de sustitución es «bang».

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

cambiar el nombre de 's / (stri | stra) ng / bang /' * .c en una ventana de terminal

Usar ls por segunda vez confirma que string.c se ha convertido en bang.cy strangle.c ahora es bangle.c.

Usar traducciones con cambio de nombre

El comando de cambio de nombre puede realizar acciones en nombres de archivos llamados traducciones. Un ejemplo simple de una traducción sería forzar un conjunto de nombres de archivos a mayúsculas.

En el comando de cambio de nombre a continuación, observe que no estamos usando una s / para iniciar la expresión central, estamos usando y /. Esto le dice a renombrar que no estamos realizando una sustitución; estamos realizando una traducción.

El término az es una expresión de Perl que significa todos los caracteres en minúscula en la secuencia de la a a la z. De manera similar, el término AZ representa todas las letras mayúsculas en la secuencia de la A a la Z.

La expresión central de este comando podría parafrasearse como «si alguna de las letras minúsculas de la a a la z se encuentra en el nombre del archivo, reemplácela con los caracteres correspondientes de la secuencia de caracteres en mayúscula de la A a la Z».

Para forzar los nombres de archivo de todos los archivos «.prg» a mayúsculas, use este comando:

cambiar el nombre de ‘y / az / AZ /’ * .prg

ls *.PRG

cambiar el nombre de 'y / az / AZ /' * .prg en una ventana de terminal

El comando ls nos muestra que todos los nombres de archivo «.prg» están ahora en mayúsculas. De hecho, para ser estrictamente precisos, ya no son archivos «.prg». Son archivos «.PRG». Linux distingue entre mayúsculas y minúsculas.

Podemos invertir ese último comando invirtiendo la posición de los términos az y AZ en la expresión central.

renombrar ‘y / AZ / az /’ * .PRG

ls *.prg

cambiar el nombre de 'y / AZ / az /' * .PRG en una ventana de terminal

Usted (Wo | Do) no aprende Perl en cinco minutos

Familiarizarse con Perl es un tiempo bien empleado. Pero para comenzar a utilizar las capacidades de ahorro de tiempo del comando de cambio de nombre, no es necesario tener muchos conocimientos de Perl para obtener grandes beneficios en potencia, simplicidad y tiempo.