Как проверить существование нескольких файлов в BASH

Я написал условие

if [[ ! -f ${SRCD}test*.txt ]]; then
    echo "файлы не существуют"
else
    echo "файлы существуют"
fi

Зная то что у меня есть файлы в директории типа test102021.txt и test102101.txt, данное условие во-первых ругается на то что ожидается условный бинарный оператор так еще и говорит о том что файлы не существуют. Как это исправить?


Ответы (2 шт):

Автор решения: mrgervant

Оставлю в ответе один проверенный лично вариант из комментария @aleksandr-barakin:

mask="${prefix}${current_date}*.txt"

if find ${search_dir}/ -maxdepth 1 -type f -name "${mask}" 2>/dev/null | grep -q . ; then
    echo "файлы существуют";
else
    echo "файлы не существуют";
fi

find ${search_path}/ -maxdepth 1 -type f -name "${file_mask}" - через find ищем файлы по маске (например, "abonents_20240815*.txt"). Если файл(ы) находит, то find вернет их список. Если нет - ничего возвращено не будет.

Однако if требует булево значение, а не текст. Поэтому далее через grep -q . проверяем наличие в результатах find хотя бы 1 символа. Если что-то нашло - будет true, а если 0 символов - false.

→ Ссылка
Автор решения: Ivan

С таким условие необходимо использовать цикл:

shopt -s nullgob
for f in "${SRCD}"test*.txt; do
    [[ -f $f ]] && echo "файл $f существует"
done
→ Ссылка