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.