Laptop Linux que muestra un indicador de bash

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

Fatmawati Achmad Zaenuri / Shutterstock.com

Familiarícese con la potencia de cambio de nombre de archivos del mundo de Linux y brinde mv– y tú mismo – un descanso. Rename es flexible, rápido y, a veces, incluso más fácil. Aquí hay un tutorial sobre esta unidad de control.

¿Qué pasa con mv?

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

los mv El comando 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, por lo que obtenemos lo que queremos. Maíz mv no es una herramienta de cambio de nombre de archivos dedicada.

Cambiar el nombre de un solo archivo con mv

Usar mv para cambiar el nombre de un tipo de archivo mv, un espacio, el nombre del archivo, un espacio y el nuevo nombre que desea darle al archivo. Luego presione Enter.

Puedes usar ls para verificar que se haya cambiado el nombre del archivo.

mv oldfile.txt newfile.txt
ls *.txt

Cambiar el nombre de varios archivos con mv

Las cosas se complican cuando desea cambiar el nombre de varios archivos. mv no tiene la capacidad de manejar el cambio de nombre de varios archivos. Tienes que recurrir a ingeniosos trucos de bash. Esto está bien si está familiarizado con la línea de comando de calidad media fu, pero la complejidad de cambiar el nombre de varios archivos con mv en marcado contraste con la facilidad de uso 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».

Como discutir mv hacer eso por nosotros? Echemos un vistazo a los archivos.

ls *.prog -l

Aquí hay una forma de hacerlo sin tener que escribir un archivo de script Bash real.

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

¿Funcionó? Revisemos los archivos y veamos.

ls *.pr*

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

¿Lo que acaba de suceder?

¿Qué hizo realmente este 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.

La siguiente parte muestra lo que hará el tratamiento. Está usando 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».

Debe haber una manera más fácil

Ciertamente. Es el rename pedido.

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 igual. Solo necesitará sustituir el nombre de comando apropiado según la versión de Linux que esté utilizando.

en distribuciones derivadas de Ubuntu y Debian que instale rename así:

sudo apt-get install rename

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

sudo dnf install prename

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

Hagamos esto de nuevo

Y esta vez usaremos rename. Regresaremos para tener un conjunto de archivos «.prog».

ls *.prog

Ahora usemos el siguiente comando para cambiarles el nombre. Luego lo comprobaremos con ls si funcionó. Recuerda reemplazar rename con 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*

Funcionó, ahora son todos archivos «.prg» y no hay más archivos «.prog» en el directorio.

¿Qué pasó esta vez?

Expliquemos esta pequeña magia, en tres partes.

La primera parte es el nombre del comando, rename (Dónde prename Dónde perl-rename , para otras distribuciones).

La ultima parte es *.prog, quien dice rename para operar en todos los archivos «.prog».

La parte central define el trabajo que queremos hacer en cada nombre de archivo. los s significa sustituto. El primer término (.prog) qué es rename buscará en cada nombre de archivo y el segundo término (.prg) es por lo que será reemplazado.

La parte central del comando, o expresión central, es un Perl ‘expresión regular‘y eso es lo que da rename domina su flexibilidad.

Cambiar otras partes de un nombre de archivo

Hemos cambiado las extensiones de nombre de archivo hasta ahora, estamos cambiando 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 verificar esto con ls.

ls sl*.c

Reemplazaremos todas las apariciones de «slang_» con «sl_». El formato del comando ya nos resulta familiar. Simplemente cambiamos el término de búsqueda, el término de reemplazo y el tipo de archivo.

rename 's/slang_/sl_' *.c

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

Podemos comprobar el resultado de este comando repitiendo el ls comando anterior con los mismos parámetros:

ls sl*.c

Eliminar parte de un nombre de archivo

Podemos eliminar parte de un nombre de archivo reemplazando el término de búsqueda con nada.

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

Podemos ver ls ordena que nuestros archivos «.c» estén todos precedidos por «sl_». Deshagámonos de eso por completo.

los rename El comando sigue el mismo formato que antes. Vamos a buscar archivos «.c». El término de búsqueda es «sl_», pero no hay un término sustituto. 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 lo encuentra, será reemplazado por nada. En otras palabras, se elimina el término de búsqueda.

El segundo uso de ls El comando confirma que el prefijo «sl_» se ha eliminado de cada archivo «.c».

Limite los cambios a partes específicas de los nombres de archivos

usemos ls para ver archivos que tienen la cadena «param» en su nombre de archivo. Entonces usaremos rename para reemplazar esta cadena con la cadena «parámetro». usaremos ls una vez más para ver el efecto rename comando tenía en estos archivos.

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

Se encuentran cuatro archivos que tienen «param» en su nombre de archivo. param.c, param_one.cy param_two.c tienen «param» al principio de su nombre. Third_param.ca “param” al final de su nombre, justo antes de la extensión.

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

El segundo uso de ls El comando nos muestra que eso es exactamente lo que sucedió. Ya sea que «param» esté 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 (excepto un carácter de nueva línea).

Usaremos el inicio del metacarácter de cadena ( ^ ) para limitar nuestra búsqueda al principio de los nombres de archivo.

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

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

Nuestro rename el comando usa el comienzo de la línea (^) metacarácter antes del término de búsqueda «parámetro». Dice rename asumir que el término de búsqueda solo se ha encontrado si está al principio del nombre del archivo. La cadena de búsqueda del «parámetro» se ignorará si se encuentra en otra parte del nombre del archivo.

Verificación con lspodemos ver que el nombre de archivo que tenía «parámetro» al final del nombre de archivo no se cambió, pero los tres nombres de archivo que tenían «parámetro» al principio de sus nombres vieron la cadena de búsqueda reemplazada por el término sustituto «valor».

El poder de rename radica en el poder de Perl. Toda la poder de perl está a tu disposición.

Buscar con grupos

rename tiene más trucos bajo la manga. Considere el caso en el que podría 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 comprobar qué archivos tenemos que comienzan con «str». Hay dos, 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 rename El comando buscará cadenas en los nombres de archivo que tengan la secuencia de caracteres «Stri» o «Stra», donde estas secuencias son seguidas inmediatamente por «ng». En otras palabras, nuestro término de búsqueda buscará «cadena» y «estrangulamiento». El término sustituto es «bang».

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

En ayuda de ls una segunda vez confirma que string.c se ha convertido en bang.cy strangle.c ahora es bangle.c.

Usar traducciones con cambio de nombre

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

En el rename orden a continuación tenga en cuenta que no utilizamos s/ para comenzar la expresión central, usamos y/. Dice rename no realizamos sustitución; hacemos una traducción.

los a-z término es una expresión de Perl que denota todos los caracteres en minúscula en la secuencia de la a a la z. Asimismo, el A-Z término 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 aa la z está 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

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

Podemos invertir este último comando invirtiendo la posición del a-z y A-Z términos en la expresión central.

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

ls *.prg

No aprendes Perl en cinco minutos

Familiarizarse con Perl es un tiempo bien invertido. Pero para empezar a utilizar las capacidades de ahorro de tiempo del rename comando, no es necesario estar familiarizado con Perl para obtener los grandes beneficios en términos de potencia, simplicidad y tiempo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas