Elementos de referencia en bash for loop desde el comando buscar

Elementos de referencia en bash for loop desde el comando buscar

Supongamos que tengo este código:

for i in $(find * -type f -name "*.txt"); do 
  # echo [element by it's index]
done

¿Cómo accedo, si es posible, a un elemento por su índice?

Respuesta1

tu comando

$(find * -type f -name "*.txt")

devolverá una lista bash (separada por espacios), no una matriz, por lo que realmente no se puede acceder a los elementos individuales de una manera "dirigida".

Para convertirlo en una matriz bash, use

filearray=( $(find * -type f -name "*.txt") )

(¡tenga en cuenta los espacios!)

Luego, puede acceder a las entradas individuales como en

for ((i=0; i<n; i++))
do
   file="${filarray[$i]}"
   <whatever operation on the file>
done

donde el número de entradas se puede recuperar a través de

n="${#filearray[@]}"

Tenga en cuenta sin embargoque estesolofunciona si los nombres de sus archivos no contienen caracteres especiales (en particular espacios) y, por lo tanto, una vez más,No se recomienda analizar la salida de lsofind. En su caso, recomendaría ver si la -execopción de findpuede hacer lo que necesita lograr.

información relacionada