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.

Linux FIND buscando archivos con nombres entre comillas simples

Estoy intentando guardar los resultados del comando FIND en una matriz para luego poder realizar algunos comandos AWK con ellos.

Mi código actual es: files_arr=("$(find "$1" -type f \( -name '*.txt' -o -name '*.doc' \) -perm -a=r -print)")

  • Este código debería encontrar todos los archivos con espacios y sin espacios y devolverlos en mi matriz (y también deben ser legibles).
  • EL PROBLEMA es que cuando tengo un directorio llamado ‘not easy’ y dentro de este directorio hay archivos llamados ‘file one’ y ‘file two’, obtendré: ‘not easy/file one’, lo que quiero obtener es: ‘not easy’/’file one’.
  • Estaba pensando en usar SED para agregar comillas, pero agregaría comillas incluso si solo tuviera un archivo de una sola palabra que no las tiene.
  • Gracias por sus consejos.
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para guardar correctamente los resultados del comando FIND en un array, necesitarás hacer algunas modificaciones en tu código. Aquí tienes lo que puedes hacer:

    # Inicializa un array vacío
    files_arr=()
    
    # Usa un bucle while para leer la salida del comando find línea por línea
    while IFS= read -r file; do
      # Envuelve cada ruta de archivo entre comillas simples y añádela al array
      files_arr+=( "'$file'" )
    done < <(find "$1" -name "*[[:space:]]*" -o -name "*" -type f -perm -a=r)
    
    # Usa comandos AWK en los elementos del array
    awk '{print $1}' <<< "${files_arr[0]}"
    

    Explicación:

    • En lugar de usar la sustitución de comando para guardar el resultado del comando find en el array, utilizamos un bucle while para leer la salida del comando find línea por línea. Esto asegura que cada ruta de archivo esté correctamente separada y procesada.
    • Dentro del bucle, envolvemos cada ruta de archivo entre comillas simples y la añadimos al array files_arr. Esto asegura que los elementos del array estén correctamente formateados para los comandos AWK y evita el problema de no incluir las comillas simples alrededor del nombre de directorio con espacios.
    • Finalmente, podemos utilizar comandos AWK en los elementos del array utilizando la sintaxis ${files_arr[index]}.

    Con estas modificaciones, deberías poder guardar con éxito los resultados del comando find en un array y utilizar comandos AWK en él. ¡Buena suerte!

Comments are closed.