如何将 find 的输出放入数组中

如何将 find 的输出放入数组中

我是 Unix 新手。我有一个要求,我必须将 find 语句的输出放在数组中,因为稍后在脚本中我必须逐行使用输出行。我的 find 语句将根据条件检索目录的位置。

以下是查找语句:

find blah -mindepth 3 -maxdepth 3 -type d  -regex ".*/V[0-9]+/wsdls+" 

答案1

你可以这样做:

array=( $(find blah -mindepth 3 -maxdepth 3 -type d -regex ".*/V[0-9]+/wsdls+") )

# loop over it
for i in ${array[@]}
do
    echo $i
done

# or in a while loop
i=0;
while [ $i -lt ${#array[@]} ]
do
    echo $i: ${array[$i]}
    ((i++))
done

答案2

stackoverflow 上的这个答案有所有细节和一些替代方案。但本质上,一个可靠的方法是:

array=()
while IFS=  read -r -d $'\0'; do
    array+=("$REPLY")
done < <(find Where What... -print0)

使用的-print0输出find和空字节作为分隔符可以避免read由带有空格或更糟糕的文件名造成的所有陷阱。

要迭代数组中的文件名,请使用引号将数组引起来:

for file in "${array[@]}"; do
    echo "$file"
done 

相关内容