Itens de referência no bash for loop do comando find

Itens de referência no bash for loop do comando find

Suponha que eu tenha este código:

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

Como acesso, se possível, um elemento pelo seu índice?

Responder1

Seu comando

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

retornará uma lista bash (separada por espaço), não uma matriz; portanto, você não pode realmente acessar os elementos individuais de uma maneira "direcionada".

Para convertê-lo em um array bash, use

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

(observe os espaços!)

Então, você pode acessar as entradas individuais como em

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

onde o número de entradas pode ser recuperado via

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

Observe, no entantoque issoapenasfunciona se os nomes dos seus arquivos não contiverem caracteres especiais (em espaço específico) e, portanto, mais uma vez,analisar a saída de lsor findnão é recomendado. No seu caso, eu recomendaria ver se a -execopção findpode fazer o que você precisa.

informação relacionada