我正在尝试将find命令的输出存储到数组中。
我尝试了不同的东西,似乎没有任何效果,其中几个用下面的注释行。我想问题是“$ {findNameCmdSubDir [@]}”正在被标记化,并且忽略了要从搜索中排除的目录,并且列出了所有目录。
如果我给find命令而不将它传递给数组,即plain find命令,我会看到列出所有其他目录的预期输出而没有排除。
#! /bin/bash
android_path=$1
excludeDirFromSearch=( doc build test unit-test script hardware prebuilt device . )
let "dirCount = 0"
findNameCmdSubDir=()
for dir in "${excludeDirFromSearch[@]}"; do
if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then
findNameCmdSubDir+=(-name "${dir}*")
else
findNameCmdSubDir+=(-name "${dir}*" -prune -o)
fi
done
searchSubDirectories=()
searchSubDirectories=( $(find "${android_path}" -mindepth 1 -maxdepth 1 \
"${findNameCmdSubDir[@]}" -type d ) ) <<-- Not Working!
#find "${android_path}" -mindepth 1 -maxdepth 1 "${findNameCmdSubDir[@]}" \
# -type d | while read line; do
# echo "$line"
#done <-- Not working
find "${android_path}" -mindepth 1 -maxdepth 1 "${findNameCmdSubDir[@]}" \
-type d -print <-- works as expected !
echo "${searchSubDirectories[@]}"
更新
我试图逃避双引号但仍然没有运气
searchSubDirectories=( $(find "${android_path}" -mindepth 1 -maxdepth 1 \"${findNameCmdSubDir[@]}\" -type d ) ) <<-- Not Working!
答案 0 :(得分:0)
定义“不工作”。您期望/想要实现的结果是什么?实际结果是什么?
如果find
打印带有空格的路径,并且您想将这些路径放入新数组,请尝试process substitution而不是command substitution:
findopts="-mindepth 1 -maxdepth 1 -type d"
...
searchSubDirectories=()
while read dir; do
searchSubDirectories+=("$dir")
done < <(find "${android_path}" $findopts "${findNameCmdSubDir[@]}")
注意两个<
字符之间的空格!
答案 1 :(得分:0)
问题出在这里
searchSubDirectories=( $(find "${android_path}" -mindepth 1 -maxdepth 1 \
"${findNameCmdSubDir[@]}" -type d ) )
你最后错过了-print
。
另外,关于这个块
for dir in "${excludeDirFromSearch[@]}"; do
if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then
findNameCmdSubDir+=(-name "${dir}*")
else
findNameCmdSubDir+=(-name "${dir}*" -prune -o)
fi
done
摆脱这个
if [ $((dirCount++)) -eq ${#excludeDirFromSearch[@]} ]; then
findNameCmdSubDir+=(-name "${dir}*")
你不需要它。对于所有已排除的目录,您需要-prune -o
,即您已完成的命令字符串应具有此表单
find -name EXCLUDE1 -prune -o -name EXCLUDE2 -prune -o -type d -print
将此与您的想法相比较(不会按预期工作)
find -name EXCLUDE1 -prune -o -name EXCLUDE2 -prune -type d