Arrays 使用find和grep填充数组

Arrays 使用find和grep填充数组,arrays,bash,grep,find,Arrays,Bash,Grep,Find,在bash中,我试图生成一个指向零大小文件的路径名数组。 我正在使用 find . -size 0 这给了我文件及其路径的列表。因此,输出为: ./001/013/fileA ./001/014/fileB ./002/077/fileA 现在我想要一个可以循环的数组,如下所示: (001/013 001/014 002/077) 我试过这个: folderlist=($(find . -size 0 | grep '\<[0-9][0-9][0-9][/][0-9][0-9][0-

在bash中,我试图生成一个指向零大小文件的路径名数组。
我正在使用

find . -size 0
这给了我文件及其路径的列表。因此,输出为:

./001/013/fileA
./001/014/fileB
./002/077/fileA
现在我想要一个可以循环的数组,如下所示:

(001/013 001/014 002/077)
我试过这个:

folderlist=($(find . -size 0 | grep '\<[0-9][0-9][0-9][/][0-9][0-9][0-9]\>' ))
for i in "${folderlist[@]}"
do
    echo $i
done
folderlist=($(find.-size 0 | grep'\'))
对于“${folderlist[@]}”中的i
做
回声$i
完成
但是输出是空的

我错过了什么


非常感谢

要仅从
find
输出中删除文件名,您可以使用:

folderlist=($(find . -size 0 -exec bash -c 'echo "${1%/*}"' - {} \;))
或循环浏览这些条目:

while read -r f; do
   echo "Processing: $f"
done < <(find . -size 0 -exec bash -c 'echo "${1%/*}"' - {} \;)
读取时-rf;做
回显“处理:$f”

完成<您可以使用
dirname
可靠地获取目录路径

folderlist=($(find . -size 0 -print0|xargs -0 -I% dirname %))
for i in "${folderlist[@]}"
do
    echo $i
done

您可以使用
dirname
来获取路径,而不是
grep
表达式。如果文件名有空格/换行符,这将中断。考虑使用-<代码> Primt0