Там в Perl renameкоманда , яка повинна зробити трюк. Але renameбудьте обережні : є кілька різних команд, які викликаються , тому переконайтеся, що у вас є сценарій Perl, який очікує perlexprаргумент. Це renameкоманда, надана perlпакетом на Debian та похідних (Ubuntu, Mint, ...), але не для інших дистрибутивів, які можуть мати іншу утиліту rename.
martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
Як бачите, він idempotent - він не додасть префікса знову, коли ви будете викликати його кілька разів.
Він працює або замінивши (нульову довжину) початок рядків ( ^), або початок, а потім додатковий prefixрядок на prefix.
Я залишу це інкапсуляцію або в скрипті оболонки, або в функції оболонки, як вправу для вас :)
Постфікс трохи складніше, тому що ви повинні з'ясувати, яка частина імені файлу являє собою розширення ...