Ссылка на элементы в цикле bash из команды find

Ссылка на элементы в цикле bash из команды find

Предположим, у меня есть такой код:

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

Как получить доступ к элементу по его индексу, если это возможно?

решение1

Ваша команда

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

вернет список bash (разделенный пробелами), а не массив, поэтому вы не сможете получить доступ к отдельным элементам «целевым» способом.

Чтобы преобразовать его в массив bash, используйте

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

(обратите внимание на пробелы!)

Затем вы можете получить доступ к отдельным записям, как показано ниже.

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

где количество записей можно получить через

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

Однако, обратите вниманиечто этотолькоработает, если имена ваших файлов не содержат специальных символов (в частности пробелов) и, следовательно, еще раз,анализ вывода lsor findне рекомендуется. В вашем случае я бы рекомендовал посмотреть, может ли -execвариант findсделать то, что вам нужно.

Связанный контент