如何列出包含特定文件的所有目录,并使用shell脚本将它们存储在数组中。我尝试了以下代码,但它给了我这个错误:ls: **/myFile.txt: No such file or directory
。 myFile.txt
可以是任何文件。
代码:
folderArray = ($(ls **/myFile.txt | tr -d myFile.txt))
echo folderArray
for folder in ${folderArray[@]}
do
echo "myFile.txt is present in $folder"
done
答案 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