Familiarícese con la potencia de cambio de nombre de archivos del mundo Linux y brinde mv
—Y usted mismo— un descanso. Rename
es flexible, rápido y, a veces, inclusive 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. Es por esto que siempre está habilitada. Pero de vez en cuando 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 utilizar para mover un archivo existente dentro 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 de cambio de nombre de archivos dedicada.
Cambiar el nombre de un solo archivo con mv
Utilizar 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. Posteriormente presione Enter.
Puedes utilizar ls
para chequear que se ha 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 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 comando de grado medio, pero la complejidad de cambiar el nombre de varios archivos con mv
contrasta 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 gama de archivos, de diferentes tipos. Algunos de estos archivos disponen una extensión «.prog». Queremos cambiarles el nombre en la línea de comandos para que tengan una extensión «.prg».
¿Cómo peleamos? mv
en hacer eso por nosotros? Echemos un vistazo a los archivos.
ls *.prog -l
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"
¿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 verdaderamente 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 próxima parte dice lo que hará el procesamiento. hacer. 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».
Tiene que haber una forma más sencilla
Definitivamente. Es el rename
mando.
rename
no forma parte de una distribución estándar de Linux, por lo que deberá instalarlo. Además tiene un nombre distinto 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 tipo de Linux que esté usando.
en Ubuntu y distribuciones derivadas de Debian que instale rename
como esto:
sudo apt-get install rename
En las distribuciones derivadas de Fedora y RedHat, instala prename
como esto. 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
Hagámoslo de nuevo
Y esta vez usaremos rename
. Retrocederemos el reloj para que tengamos un conjunto de archivos «.prog».
ls *.prog
Ahora usemos el siguiente comando para cambiarles el nombre. Posteriormente lo comprobaremos con ls
si funcionó. Recuerda sustituir 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*
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.
los primero parte es el nombre del comando, rename
(o prename
o perl-rename
, para las demás distribuciones).
los último parte es *.prog
, que dice rename
para operar en todos los archivos «.prog».
los medio parte establece 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 con lo que se sustituirá.
La parte central del comando, o expresión central, es un Perl ‘expresión regular‘y es lo que da la rename
dominar su flexibilidad.
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 disponen el prefijo «slang_». Podemos chequear esto con ls
.
ls sl*.c
Vamos a reemplazar todas las apariciones 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 buscamos archivos «.c» y buscamos «slang_». Siempre que se encuentra «slang_» en un nombre de archivo, se sustituye por «sl_».
Podemos chequear el resultado de ese comando repitiendo el ls
comando desde arriba con los mismos parámetros:
ls sl*.c
Borrar parte de un nombre de archivo
Podemos borrar una parte de un nombre de archivo sustituyendo el término de búsqueda por nada.
ls *.c
rename 's/sl_//' *.c
ls *.c
Podemos ver desde el ls
comando que todos nuestros archivos «.c» estén precedidos por «sl_». Deshagámonos de eso por completo.
los rename
El comando 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. Dicho de otra forma, se elimina el término de búsqueda.
El segundo uso del ls
El comando 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 ver archivos que disponen 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 rename
comando tuvo en esos archivos.
ls *param*
rename 's/param/parameter' *.c
ls *param*
Se encuentran cuatro archivos que disponen «param» en su nombre de archivo. param.c, param_one.c y param_two.c disponen «param» en el comienzo de su nombre. third_param.c tiene «param» en el fin 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 del ls
El comando nos muestra que eso es exactamente lo que ha sucedido. Si «param» estaba al principio o al final del nombre de archivo, se ha reemplazado por «parámetro».
Podemos utilizar 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. A modo de 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 usar el inicio del metacarácter de cadena ( ^
) para restringir nuestra búsqueda al comienzo 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 previamente 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.
Nuestro rename
el comando utiliza el comienzo de la línea (^
) metacarácter antes del término de búsqueda «parámetro». Esto dice rename
para considerar que se ha encontrado el término de búsqueda solo si está al principio 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.
Comprobando con ls
, podemos ver que el nombre de archivo que tenía «parámetro» en el fin del nombre de archivo no se ha modificado, pero los tres nombres de archivo que tenían «parámetro» en el comienzo de sus nombres se ha reemplazado la cadena de búsqueda 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.
Búsqueda con agrupaciones
rename
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 chequear qué archivos tenemos que comienzan con «str». Hay dos de ellos, string.cy strangle.c. Podemos cambiar el nombre de 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». Dicho de otra forma, nuestro término de búsqueda buscará «cadena» y «Estrangular». El término de sustitución es «bang».
ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c
Usando ls
una segunda vez confirma que string.c se ha convertido en bang.cy strangle.c ahora es bangle.c.
Uso de traducciones con cambio de nombre
los rename
El comando puede realizar acciones en nombres de archivos llamados traducciones. Un ejemplo simple de una traducción sería forzar un conjunto de nombres de archivo a mayúsculas.
En el rename
comando a continuación observe que no estamos usando un s/
para comenzar la expresión central, estamos usando y/
. Esto dice rename
no estamos realizando una sustitución; estamos realizando una traducción.
los a-z
término es una expresión de Perl que significa todos los caracteres en minúscula en la secuencia de la a a la z. De la misma forma, 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 a a la z se encuentra en el nombre del archivo, reemplácelas 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:
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. En realidad, para ser estrictamente precisos, ya no son archivos «.prg». Son archivos «.PRG». Linux distingue entre mayúsculas y minúsculas.
Podemos revertir ese ú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 comenzar a usar las capacidades de ahorro de tiempo del rename
comando, no es necesario tener muchos conocimientos de Perl para obtener grandes beneficios en potencia, simplicidad y tiempo.
setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);