shopt -s nullglob
set -- "$WORK_DIR/$SRC_FILE_EXT"*
printf 'There are %d names that match "%s"\n' "$#" "$WORK_DIR/$SRC_FILE_EXT*"
То есть разверните шаблон, соответствующий интересующим вас именам, задав позиционные параметры. Специальная переменная $#
будет содержать количество совпавших имен. Установите параметр оболочки nullglob
в bash
, чтобы шаблон не расширялся, если он вообще не совпадает.
Если вы хотите убедиться, что каталоги не совпадают, вы можете использовать простой цикл, который подсчитывает не -каталоги:
shopt -s nullglob
num=0
for name in "$WORK_DIR/$SRC_FILE_EXT"*; do
[ ! -d "$name" ] && num=$(( num + 1 ))
done
printf 'There are %d non-directories with names that match "%s"\n' "$num" "$WORK_DIR/$SRC_FILE_EXT*"
Использованиеfind
:
find "$WORK_DIR" -maxdepth 1 ! -type d -name "$SRC_FILE_EXT*" -exec echo x \; | wc -l
(предполагая, что ваш find
знает о не -стандартном -maxdepth
предикате ). Это вернет количество не -каталогов в $WORK_DIR
, имена которых начинаются с $SRC_FILE_EXT
.
num=$( find "$WORK_DIR" -maxdepth 1 ! -type d -name "$SRC_FILE_EXT*" -exec echo x \; | wc -l )
printf 'There are %d non-directories with names that match "%s" in "%s"\n' \
"$num" "$SRC_FILE_EXT*" "$WORK_DIR"
Существует тонкое различие между использованием глобусов оболочки для сопоставления имен и использованием find
в том, что find
более строго относится к сопоставлению типов файлов. Утилита find
обнаружит символическую ссылку на файл или каталог не как файл или каталог, а как символическую ссылку, в то время как оболочка будет разыменовывать символическую ссылку и проверять то, на что она ссылается.