列出包含特定文件的所有目录并将它们存储在数组中

时间:2014-10-27 05:22:26

标签: shell scripting zsh

如何列出包含特定文件的所有目录,并使用shell脚本将它们存储在数组中。我尝试了以下代码,但它给了我这个错误:ls: **/myFile.txt: No such file or directorymyFile.txt可以是任何文件。

代码:

folderArray = ($(ls **/myFile.txt | tr -d myFile.txt))
echo folderArray
for folder in ${folderArray[@]}
do
    echo "myFile.txt is present in $folder"
done

2 个答案:

答案 0 :(得分:1)

您可以使用此命令列出包含myFile.txt的所有目录:

find . -type f -name 'myFile.txt' -print0 | xargs -0 -I {} dirname {}

并将它们存储在一个数组中:

arr=( $(find . -type f -name 'foo.*' -print0 | xargs -0 -I {} dirname {}) )

答案 1 :(得分:1)

使用zsh的力量:

folderArray=($(echo **/myFile.txt(N^/:h)))

末尾的()内的标志被称为文件名生成中使用的glob修饰符。

  • N:设置NULL_GLOB选项
  • ^/:仅匹配文件,而不匹配目录
  • :h:从结果中删除文件名,作为dirname