Я хочу переименовать все файлы, которые соответствуют шаблону.
Этот тип лайнеров обычно работает для меня, но я получаю какую-то ошибку.
Вид имен файлов, которые у меня есть: PMSNpoda5718_1p2g_out_fst.txt SCSNpoda5718_1p2g_out_fst.txt
Имена файлов, которые я хочу: PM-SN_poda5718_1p2g_out_fst.txt SC-SN_poda5718_1p2g_out_fst.txt
Моя первая попытка была:
ls *fst.txt | perl -ne '/^([A-Z][A-Z])([A-Z][A-Z])(poda.*?$)/; system("mv $_ $1-$2_$3")'
Но это не сработало.
Наконец я придумал строку, которая печатает именно то, что я хочу
ls *fst.txt | perl -lne '/([a-zA-Z]{2})([a-zA-Z]{2})(poda.*?$)/; print "mv $_ $1-$2_$3"'
печать:
mv PMSNpoda5718_1p2g_out_fst.txt PM-SN_poda5718_1p2g_out_fst.txt
mv SCSNpoda5718_1p2g_out_fst.txt SC-SN_poda5718_1p2g_out_fst.txt
Но когда я использую его для переименования файлов:
ls *fst.txt | perl -lne '/([a-zA-Z]{2})([a-zA-Z]{2})(poda.*?$)/; system("mv $_ $1-$2_$3")'
Я получаю
sh: $'32mPMSNpoda5718_1p2g_out_fst.txt\E[0m': command not found
mv: missing destination file operand after ''$'\033''[01'
Try 'mv --help' for more information.
sh: $'32mSCSNpoda5718_1p2g_out_fst.txt\E[0m': command not found
mv: missing destination file operand after ''$'\033''[01'
Try 'mv --help' for more information.
Снова, но с добавлением эха
ls *fst.txt | perl -lne '/([a-zA-Z]{2})([a-zA-Z]{2})(poda.*?$)/; system("echo mv $_ $1-$2_$3")'
Я получаю
mv
h: $'32mPMSNpoda5718_1p2g_out_fst.txt\E[0m': command not found
mv
h: $'32mSCSNpoda5718_1p2g_out_fst.txt\E[0m': command not found
Может кто-нибудь указать мне, в чем заключается ошибка, чтобы я мог понять, что я делаю неправильно?
Спасибо!