通过 find 命令引用 bash for 循环中的项目

通过 find 命令引用 bash for 循环中的项目

假设我有这样的代码:

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可以完成您需要完成的任务。

相关内容