Как проверить существование нескольких файлов в BASH
Я написал условие
if [[ ! -f ${SRCD}test*.txt ]]; then
echo "файлы не существуют"
else
echo "файлы существуют"
fi
Зная то что у меня есть файлы в директории типа test102021.txt и test102101.txt, данное условие во-первых ругается на то что ожидается условный бинарный оператор так еще и говорит о том что файлы не существуют. Как это исправить?
Ответы (2 шт):
Оставлю в ответе один проверенный лично вариант из комментария @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.
С таким условие необходимо использовать цикл:
shopt -s nullgob
for f in "${SRCD}"test*.txt; do
[[ -f $f ]] && echo "файл $f существует"
done