Как проверить, имеет ли файл расширение (любое расширение) с регулярным выражением в Bash? - PullRequest
1 голос
/ 25 апреля 2020

Я новичок в Bash Сценарии с использованием Ubuntu18.04 и пытаюсь найти, имеет ли файл расширение (любое расширение), но регулярное выражение, которое я пытаюсь реализовать, не работает. Я использовал то же регулярное выражение в сценарии Perl, и он работает нормально. Но это не работает в Bash Script. Ниже мой Bash Код:

dir="ImageFolder"
fileName=""
for f in "$dir"/*;
do
    fileName="$(basename "$f")"

if [[ $fileName =~ /(.*)?\.(.*)/ ]]
then
    echo $fileName
    echo "Yes it has extension"
fi
done

Он не выполняет эти команды эха, даже если файлы внутри «ImageFolder» имеют свои расширения. Другими словами, оператор if не выполняется. Он выполняется только тогда, когда я инвертирую условие, помещая символ '!' перед '$fileName'. Когда я инвертирую условие: if [[ ! $fileName =~ /(.*)?\.(.*)/ ]], то выполняется, но выдает нежелательные результаты (см. Изображение): Отображает файлы с расширением и говорит, что да, имеет расширение

Но когда я действительно удаляю расширений файлов, перейдя физически внутрь папки, затем снова запускается и говорит, что расширение файла существует (см. изображение) говорит: «Да, у него есть расширения, хотя я их удалил»

Я действительно нужно это регулярное выражение для работы. Некоторая помощь будет высоко оценена.

1 Ответ

1 голос
/ 25 апреля 2020

Это должно работать, как только вы удалите '/' вокруг шаблона регулярного выражения.

[[ $fileName =~ (.*)?\.(.*) ]]

ref. https://www.tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF для дополнительных примеров.

...