Есть команда Perl,rename которая должна сработать. Однако будьте осторожны: вызывается несколько разных команд rename, поэтому убедитесь, что у вас есть скрипт Perl, который ожидает в perlexprкачестве аргумента a . Это 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
Как видите, он идемпотентен - он не будет добавлять префикс снова, когда вы вызываете его несколько раз.
Он работает либо заменой начала (нулевой длины) строк ( ^), либо начала, за которым следует необязательная prefixстрока с prefix.
Я оставлю инкапсуляцию этого в сценарии оболочки или функции оболочки в качестве упражнения для вас :)
Postfix немного сложнее, потому что вы должны выяснить, какая часть имени файла представляет собой расширение ...