es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambio de nombre de archivo en Linux

Soy un traductor español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en formato markdown.

Soy bastante nuevo en awk y en scripting de linux. Necesito su ayuda para modificar la generación de archivos:

Salida actual: A20211126.0200+0500-0215+0500.xml

Salida esperada: A20211126.0200-0215.xml

para todos los archivos en un directorio particular.

También quiero usar un crontab para asegurarme de que los nombres de archivo con +0500 sean verificados y, si se encuentran, convertirlos como se menciona en la salida esperada.

Gracias a todos.

Hice lo siguiente para lograr la salida deseada.

for file in *.xml; do mv $file ${file//+0500/}; done

ahora puedo eliminar la parte +0500.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para modificar aún más la generación del archivo y lograr el resultado esperado, puede utilizar awk para extraer las partes necesarias del nombre del archivo y concatenarlas para formar el nuevo nombre del archivo.

    Aquí hay un ejemplo de comando que puede usar:

    for file in *.xml ; do
        time=$(echo $file | awk -F'[+.]' '{print $2}')
        duration=$(echo $file | awk -F'[-+]' '{print $3}')
        new_file="A$(echo ${file:1:8}).${time}-${duration}.xml"
        mv $file $new_file
    done
    

    Este comando primero recorre todos los archivos xml en el directorio actual. Para cada archivo, extrae las partes del nombre del archivo de tiempo y duración utilizando awk. La parte de tiempo se extrae utilizando los caracteres . y + como delimitadores, mientras que la parte de duración se extrae utilizando los caracteres - y + como delimitadores.

    Una vez que se extraen las partes necesarias del nombre del archivo, se concatenan para formar el nuevo nombre del archivo en el formato deseado. Se utiliza el comando mv para cambiar el nombre del archivo antiguo al nuevo nombre.

    Para ejecutar este comando periódicamente utilizando crontab, simplemente puede agregarlo al archivo crontab con el horario deseado. Por ejemplo, si desea ejecutar el comando todos los días a medianoche, puede agregar la siguiente línea a su archivo crontab:

    0 0 * * * /ruta/a/script.sh
    

    Reemplace /ruta/a/script.sh por la ruta al script que contiene el comando anterior.

Comments are closed.