Проверьте, есть ли в каталоге только один из двух типов файлов - PullRequest
0 голосов
/ 26 мая 2020

У меня есть сценарий, который проверяет, есть ли только один файл в каталоге. Однако я не могу понять, как проверить, есть ли только один исполняемый файл (без расширения файла) или сценарий (. 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

Кто-нибудь знает, как я могу это сделать?

1 Ответ

1 голос
/ 26 мая 2020

Не разбирайте 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"}"

Обратите внимание, что переменные со всеми именами в верхнем регистре зарезервированы для оболочки, это рекомендуется использовать имена переменных в нижнем или смешанном регистре.

...