Métodos de Renombrado Masivo de Archivos en Linux

Configuración de Datos de Prueba

Para ilustrar los métodos, primero crearemos un directorio de prueba con algunos archivos.

mkdir -p /tmp/test_files
cd /tmp/test_files
touch registro_usuario_10001_completado.log
touch registro_usuario_10002_completado.log
touch registro_usuario_10003_completado.log
touch registro_usuario_10004_completado.log
touch registro_usuario_10005_completado.log

El resultado de ls -l mostraría:

-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10001_completado.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10002_completado.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10003_completado.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10004_completado.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10005_completado.log

Objetivo del Renombrado

El propósito es eliminar la subcadena "_completado" de todos los nombres de archivo, logrando este resultado:

-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10001.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10002.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10003.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10004.log
-rw-r--r-- 1 usuario usuario 0 Jun 10 10:15 registro_usuario_10005.log

Método 1: Bucle 'for' con Sustitución mediante 'sed'

Este método utiliza un bucle for para iterar sobre los archivos y el comando sed para procesar el nombre.

#!/bin/bash
for archivo in ./*.log
do
    mv "$archivo" "$(echo "$archivo" | sed 's/_completado//')"
done

El script recorre cada archivo .log, utiliza sed para eliminar "_completado" del nombre y luego ejecuta mv con el nombre nuevo.

Método 2: Bucle 'for' con Expansión de Parámetros

Una alternativa más eficiente emplea la expansión de parámetros de Bash para remover un sufijo específico.

#!/bin/bash
for archivo in ./*.log
do
    mv "$archivo" "${archivo%_completado*}.log"
done

La expresión ${archivo%_completado*} elimina desde "_completado" hasta el final del nombre base, luego se añade la extensión .log.

Método 3: Uso de 'ls' y 'awk' parra Construir Comandos

Se puede combinar ls y awk para generar y ejecutar comandos mv.

Primero, examinemos cómo awk separa los nombres usando "_completado" como delimitador:

ls *.log | awk -F '_completado' '{print "Original:", $0; print "Parte 1:", $1; print "Parte 2:", $2}'

Para realizar el renombrado, generamos el comando mv completo y lo pasamos al shell:

ls *.log | awk -F '_completado' '{print "mv \"" $0 "\" \"" $1 $2 "\""}' | bash

Este pipeline crea un comando mv para cada archivo, uniendo las partes antes y después del delimitador, y lo ejecuta.

Método 4: Comando Especializado 'rename'

La forma más directa y concisa es utilizar el comando rename, diseñado para este propósito.

rename '_completado' '' *.log

Este comando remeplaza la primera ocurrencia de "_completado" con una cadena vacía en todos los archivos que coinciden con *.log.

Ejemplo Adicional: Cambio de Extensión

El comando rename también puede modificar extensiones de archivo fácilmante.

rename '.log' '.txt' *

Esto cambiaría todas las extensiones .log a .txt en el directorio actual.

Etiquetas: bash shell-script AWK rename Linux-commands

Publicado el 10-5 23:57