FeaturedNOTICIAS

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


Computadora portátil Linux que muestra un indicador de bash
fatmawati achmad zaenuri / Shutterstock.com

Enfréntate al poder de renombrar archivos del mundo Linux y vamos mv—Y tú mismo —un descanso. Rename es flexible, rápido y, a veces, incluso más simple. Aquí hay un tutorial para esta potencia de comando.

¿Qué tiene de malo mv?

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

El 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 en un nuevo archivo, con un nuevo nombre. El efecto neto es cambiar el nombre del archivo, por lo que obtenemos lo que queremos. Pero mv no es una herramienta dedicada para renombrar archivos.

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 que tenga el archivo. Luego presione Entrar.

puedes usar ls para verificar que el archivo ha sido renombrado.

mv oldfile.txt newfile.txt
ls *.txt

Cambiar el nombre de varios archivos con mv

Las cosas se complican cuando quieres cambiar el nombre de varios archivos. mv no tiene la capacidad de manejar el cambio de nombre de varios archivos. Tienes que recurrir al uso de algunos ingeniosos trucos de Bash. Está bien si conoce un poco de la línea de comandos de nivel medio, pero las complejidades de cambiar el nombre de varios archivos con mv está 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 desde la línea de comandos para que tengan una extensión «.prg».

como luchamos mv en hacerlo por nosotros? Echemos un vistazo a los archivos.

ls *.prog -l

Aquí hay una manera de hacerlo que no implica 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*

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.

La siguiente parte dice cuál será el procesamiento. hacer. el esta 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

Seguramente. Y el rename mando.

rename no es 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 deberá reemplazar el nombre de comando apropiado según la versión de Linux que esté utilizando.

en las distribuciones derivadas de Ubuntu y Debian que instala rename como esto:

sudo apt-get install rename

En distribuciones derivadas de Fedora y RedHat instalar prename como esto. Observe la «p» inicial, que significa Perl.

sudo dnf install prename

Para instalarlo en Manjaro Linux usa el siguiente comando. Observe que el comando de cambio de nombre se llama perl-rename.

sudo pacman -Syu perl-rename

Hagámoslo de nuevo

Y esta vez usaremos rename. Retrocederemos el reloj para que tengamos una serie de archivos «.prog».

ls *.prog

Ahora usemos el siguiente comando para cambiarles el nombre. A continuación, 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 todos son archivos «.prg» y no quedan archivos «.prog» en el directorio.

¿Qué pasó esta vez?

Expliquemos ese poquito de magia, en tres partes.

El primero parte es el nombre del comando, rename (o prename o perl-rename , para otras distribuciones).

El Ultimo parte es *.prog, que cuenta rename para operar en todos los archivos “.prog”.

El medio parte define el trabajo que queremos hacer en cada nombre de archivo. El s significa sustituto. El primer término (.prog) y qué 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 una ‘expresión regular’ de Perl y es lo que da la rename controlar su flexibilidad.

Cambiar otras partes de un nombre de archivo

Hasta ahora hemos cambiado las extensiones de los nombres de los archivos, cambiemos otras partes de los nombres de los archivos.

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

ls sl*.c

Reemplazaremos todas las ocurrencias de «slang_» con «sl_». El formato del comando ya nos resulta 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

Esta vez estamos buscando los archivos «.c» y estamos buscando «slang_». Cada vez que se encuentra «slang_» en un nombre de archivo, se reemplaza con «sl_».

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

ls sl*.c

Eliminación de 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 desde el ls ordena que nuestros archivos “.c” estén todos precedidos por “sl_”. Vamos a deshacernos de él por completo.

El rename el comando sigue el mismo formato que antes. Buscaremos los archivos «.c». El término de búsqueda es «sl_», pero no hay un término de reemplazo. 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, el término de búsqueda se elimina.

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

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

Usamos ls para ver los archivos que tienen la cadena «param» en su nombre de archivo. Entonces usaremos rename para reemplazar esa cadena con la cadena «parámetro». Usaremos ls una vez más para ver el efecto de la rename comando tomó esos archivos.

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

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

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

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

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

Usaremos el comienzo 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 renombramos anteriormente se enumeran y podemos ver que la cadena «parámetro» está al comienzo de tres nombres de archivo y al final de uno de los nombres de archivo.

Nuestra rename el comando usa el principio de la línea (^) metacarácter antes del término de búsqueda «parámetro». esto dice rename considere que el término de búsqueda solo se encontró si se encuentra al principio del nombre del archivo. La cadena de búsqueda «parámetro» se ignorará si se encuentra en cualquier otro lugar del nombre del archivo.

Comprobar con ls, podemos ver que el nombre de archivo que tenía «parámetro» en fin del nombre de archivo no se cambió, pero los tres nombres de archivo que tenían «parámetro» al Comienzo de sus nombres se ha reemplazado la cadena de búsqueda por el término de reemplazo «valor».

El poder de rename reside en el poder de Perl. Todo el poder de Perl está a tu disposición.

Buscar con agrupaciones

rename tiene aún más trucos bajo la manga. Consideremos 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 reemplazo no funcionará aquí.

En este ejemplo usamos ls para verificar qué archivos tenemos que comienzan con «str». Hay dos de ellos, string.c y strangle.c. Podemos renombrar ambas cadenas al mismo tiempo usando una técnica llamada agrupación.

La expresión central de este rename el comando 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 «extraño». El término de reemplazo es «explosión».

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

Utilizando ls una segunda vez confirma que string.c ha cambiado a bang.c y strangle.c ahora es bangle.c.

Uso de traducciones con cambio de nombre

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

En rename siguiente comando tenga en cuenta que no estamos usando un s/ para comenzar la expresión central, estamos usando y/. esto dice rename no estamos realizando un reemplazo; estamos haciendo una traducción.

El a-z término es una expresión de Perl que indica todos los caracteres en minúsculas 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 del medio en este comando podría parafrasearse como «si alguna de las letras minúsculas de la a a la z está en el nombre del archivo, reemplácela con los caracteres correspondientes de la secuencia de caracteres en mayúsculas de la A a la Z».

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

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

ls *.PRG

El ls El comando nos muestra que todos los nombres de archivo «.prg» ahora están en mayúsculas. De hecho, para ser 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 a-z Y A-Z términos de la expresión central.

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

ls *.prg

Tú (Wo | Do) no aprendes Perl en cinco minutos

Familiarizarse con Perl es un tiempo bien invertido. Pero para comenzar a usar las funciones de ahorro de tiempo del rename comando, no es necesario tener muchos conocimientos de Perl para obtener grandes beneficios en términos de potencia, simplicidad y tiempo.



TE INTERESA>>  El escenario de "Cyrano" es realmente impresionante: ¿dónde se rodó la película?

Deja una respuesta

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

Botón volver arriba