Регулярное выражение для проверки файла в bash - PullRequest
0 голосов
/ 11 ноября 2011

Можно ли проверить, существует ли файл с регулярным выражением в bash?

Я пытался сделать следующее:

if [ -f /path/to/file*.txt ]

Но, к сожалению, это не работает.

Кто-нибудь знает, как это возможно?

Ответы [ 2 ]

4 голосов
/ 11 ноября 2011

Ваш подход будет работать до тех пор, пока существует только один файл, соответствующий шаблону.bash сначала расширяет подстановочный знак, что приводит к вызову типа:

if [ -f /path/to/file*.txt ]
if [ -f /path/to/file1.txt ]
if [ -f /path/to/file1.txt /path/to/file2.txt ]

в зависимости от количества совпадений (0, 1, 2 соответственно).Чтобы проверить только существование, вы можете просто найти:

find /path/to -name 'file*.txt' | grep -q '.'
0 голосов
/ 01 октября 2018

Как объясняет @thiton, glob (не реальное регулярное выражение) расширяется, и проверка не проходит, если существует несколько файлов, соответствующих глобусу.

Вы можете использовать взамен compgenкак объяснено здесь Проверьте, есть ли у шара какие-либо совпадения в bash Подробнее на справочной странице compgen

Вот пример

if $(compgen -G "/path/to/file*.txt" > /dev/null); then
    echo "Some files exist."
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...