Найдите соответствующий шаблон имени файла с помощью сценария bash

Во-первых, я прошу прощения, если это вопрос новичков - я новичок в сценариях bash.

У меня есть каталог, содержащий много типов файлов и папок. Мне нужно выполнить ряд действий над всеми файлами, соответствующими определенному шаблону. Это шаблон: prefix_suffix.ext. _suffix.ext одинаково для всех целевых файлов, и только часть prefix является переменной.

Возможно ли (и если да, то как?) Внутри bash перебрать все имена файлов, соответствующие шаблону, и иметь в цикле одну переменную для filename и одну для prefix. Я бы не хотел использовать внешние инструменты, такие как sed.

Любая помощь будет принята с благодарностью! Спасибо!


person iamthearm    schedule 19.11.2015    source источник


Ответы (1)


for filename in *_suffix.ext; do 
    prefix="${filename%_suffix.ext}"
    #do your thing here
done

При этом используется функция удаления суффикса POSIX (см. man dash и введите /suffix<enter> для поиска suffix):

$ {параметр% word} Удалить наименьший шаблон суффикса. Слово расширяется, образуя узор. Расширение параметра затем приводит к параметру с удалением наименьшей части суффикса, совпадающей с шаблоном.

(%% удалит самый длинный совпадающий суффикс, но поскольку мы используем здесь буквальный суффикс вместо шаблона глобуса, в данном случае они совпадают).

Работоспособный пример:

for filename in pre1_suffix.ext pre2_suffix.ext; do     
       prefix="${filename%_suffix.ext}"
       echo "$prefix"
done

напечатает

pre1
pre2
person PSkocik    schedule 19.11.2015
comment
Спасибо! Сработало отлично - приму, как только смогу. - person iamthearm; 20.11.2015