Добавление суффикса ко многим файлам при сохранении расширений

У меня есть каталог ~/mydir/ со многими файлами. Некоторые из этих файлов

 ~/mydir/foo.py ~/mydir/foo.tex ~/mydir/foo.pdf ~/mydir/foo.log 

Я хотел бы изменить любой файл в ~/mydir/ чье базовое имя foo для foo-bar . Таким образом, файлы, указанные выше, должны быть переименованы в

 ~/mydir/foo-bar.py ~/mydir/foo-bar.tex ~/mydir/foo-bar.pdf ~/mydir/foo-bar.log 

Я не беспокоюсь о новых именах файлов, конфликтующих с существующими файлами ( $ ls ~/mydir/foo-bar* ничего не возвращает).

Похоже, это должно быть легко сделать в bash, но я не могу понять это.

Есть ли простой сценарий для выполнения этой задачи?

Если ваш дистрибутив использует (или предлагает) версию perl для переименования (Debian и большинство производных):

 cd mydir rename 's/\.([^.]+)$/-bar.$1/ 

Я знаю некоторые дистрибутивы (я не помню, что это было) предлагает это как prename .

Это можно сделать с помощью mv :

 for name in ./foo*; do mv "$name" "${name/foo/foo-bar}"; done 

Например:

 [devuser@machine test]$ touch foo.log foo.pdf foo.tex foo.py [devuser@machine test]$ ls foo.log foo.pdf foo.py foo.tex [devuser@machine test]$ for name in ./foo*; do mv "$name" "${name/foo/foo-bar}"; done [devuser@machine test]$ ls foo-bar.log foo-bar.pdf foo-bar.py foo-bar.tex