Вы должны быть осторожны, какой флаг вы выбрасываете в свой оператор if
, и как он соотносится с желаемым результатом.
Если вы хотите проверить только обычные файлы , а не другие типы записей файловой системы, вам нужно изменить код вашего скелета на:
if [ -f file ]; then
echo true;
fi
Использование -f
ограничивает if
обычными файлами, тогда как -e
более обширный и будет соответствовать всем типам записей файловой системы. Конечно, есть и другие опции, такие как -d
для каталогов и т. Д. См. http://tldp.org/LDP/abs/html/fto.html для хорошего списка.
Как указывает @msw, test
(то есть [
) будет задыхаться, если вы попытаетесь передать ему более одного аргумента. Это может произойти в вашем случае, если глобус для *.flac
вернул более одного файла. В этом случае попробуйте обернуть ваш if
тест в цикл вроде:
for file in ./*.pdf
do
if [ -f "${file}" ]; then
echo 'true';
break
fi
done
Таким образом, вы break
в первом экземпляре нужного расширения файла можете продолжать работу с остальной частью сценария.