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.

sed – Incorpora una cadena de caracteres de nombres de archivo/carpeta específicos en archivos de texto

Intento agregar una cadena a la primera línea en archivos de texto.

La primera parte de cada cadena es idéntica. Aquí está “#Test:”. La última parte de la cadena debe incorporar el dígito que se deriva de los nombres de la carpeta y el archivo.
Los nombres de las carpetas consisten exclusivamente en dígitos del 1 al 52. Hay entre 1 y 20 archivos en cada carpeta con la siguiente estructura:

  • 1 (carpeta)
    • 1_tree1 (archivo)
    • 1_tree2 (archivo)
    • 1_tree3 (archivo)
  • 2 (carpeta)
    • 2_tree1 (archivo)
    • 2_tree2 (archivo)
    • 2_tree3 (archivo)

El sistema operativo es Ubuntu 20.04.

Puedo cambiar cada archivo por separado. Por ejemplo, el siguiente comando en la terminal agrega “#Tree:1” a un archivo en la primera carpeta.

sed -i '1s/^/#Test:1 \n/' '/ruta/al/archivo'

Sin embargo, si intento hacer esto para todos los archivos en la carpeta, no puedo continuar. ¿Podrías mostrarme cómo hacerlo automáticamente? No necesariamente estoy restringido a sed.

Gracias.

Tags:  

Answer

  1. Avatar for davy.ai

    Para agregar la cadena #Prueba a la primera línea de todos los archivos de texto en una carpeta, junto con su respectivo número de carpeta y archivo, puedes utilizar una combinación de los comandos find, sed y scripts de bash.

    Primero, navega hasta el directorio padre de las carpetas que contienen los archivos de texto. Luego, ejecuta el siguiente comando en la terminal:

    find . -type f -name "*.txt" -execdir sh -c 'sed -i "1s/^/#Prueba:${PWD##*/}_$(basename {} .txt) /" {}' \;
    

    Este comando encuentra todos los archivos con la extensión .txt en el directorio actual y sus subdirectorios. Para cada archivo, cambia al directorio que contiene dicho archivo (-execdir) y luego ejecuta el comando sed para agregar la cadena #Prueba a la primera línea del archivo.

    La parte ${PWD##*/} del comando recupera el nombre del directorio actual (es decir, el número de la carpeta) y $(basename {} .txt) extrae el nombre del archivo sin la extensión .txt (es decir, el número del archivo).

    Después de ejecutar este comando, todos los archivos de texto en las carpetas especificadas tendrán la cadena #Prueba con su respectivo número de carpeta y archivo agregado a la primera línea.

Comments are closed.