检查一个目录中是否只有两种类型的文件之一。

问题描述 投票:0回答:1

我有一个脚本可以检查一个目录中是否只有一个文件。然而,我不知道如何检查该目录中是否只有一个可执行文件(没有文件扩展名)或脚本(.sh)。这是我目前的情况。

loc=(/Applications/*)
APPROOTDIR="${loc[RANDOM % ${#loc[@]}]}/"
APPDIR="${APPROOTDIR}Contents/MacOS/"
echo "APPROOTDIR is ${APPROOTDIR}"
echo "APPDIR is ${APPDIR}"
FIAD=$(ls ${APPDIR})
if [ `ls -1 ${APPDIR}* 2>/dev/null | wc -l ` == 1 ]; then
    echo "One executable or script: ${FIAD}"
else
    echo "Not one executable or script: ${FIAD}"
fi

有谁知道我怎么做?

bash shell ls
1个回答
1
投票

不要解析ls,用目录项填充另一个数组并代替它工作。

shopt -s nullglob
# set up loc, APPDIR, etc. here
ent=("$APPDIR"*)
if [[ ${#ent[@]} -eq 1 && ( $ent = *.sh || -x $ent ) ]]; then
  echo 'One executable or script: '
else
  echo 'Not one executable or script: '
fi
printf '%q\n' "${ent[@]#"$APPDIR"}"

需要注意的是,变量名全为大写的变量是留给shell的,建议使用小写或混合大写的变量名。

© www.soinside.com 2019 - 2024. All rights reserved.