Есть команда 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 немного сложнее, потому что вы должны выяснить, какая часть имени файла представляет собой расширение ...