нет вилок:
ls | perl -lne '$suf=substr($_,6); rename $_, "XXXXX-$suf"'
Когда вы используете цикл оболочки, mvвилки один раз для каждого файла. renameКоманда Perl не делает.
(Команда переименования Perl имеет некоторые ограничения, но в данном конкретном случае эти ограничения не применяются.)
Что касается renameкоманды, показанной ранее, да, это работает, но тогда у вас есть вся эта путаница между двумя различными типами переименования и так далее. Если у вас есть правильный, отлично, но если нет, это тоже работает.
Если у вас нет команды perl-rename и вы не можете ее установить, вы можете просто сделать это:
ls | perl -lne '$old=$_; s/(\w+)/XXXXX/; rename $old, $_'
Как видите, здесь используется та же подстановка, что и в верхнем ответе. Конечно, Perl переименования есть и другие навороты (верхний ответ было сказано, -nуже, то есть -0, -fи так далее), и тем более из них вам нужно, тем больше вы должны установить , что вместо того , чтобы добавить собственные таким образом , ,
rename. Я предполагаю, что это Ларри Уоллrenameизrenameпакета Debian и производного (и IIRCprenameпо системам убеждения RedHat). Очень полезный инструмент.