Скрипт оболочки Bash для удаления guid из имени файла

Скрипт оболочки Bash для удаления guid из имени файла

Я пытаюсь заменить guid без дефисов в некоторых именах файлов.

Я думаю, что регулярное выражение у меня готово, однако мне не удаётся заставить работать друг с другом ни команды экранирования, ни команды замены.

Вот мое регулярное выражение

https://regex101.com/r/SiqsjP/1

(-[0-9a-f]{32})

С такими именами файлов

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

Я видел этот ответСкрипт оболочки Bash для поиска и удаления подстроки в имени файлано это не совсем то же самое...

Я думаю, это должно работать, но не выдает сообщение об ошибке?

newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`

решение1

Всед БРЭ(основные регулярные выражения) вам также следует экранировать фигурные скобки {}:

newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`

Чтобы переместить/переименовать файл:

mv "$filename" "$newname"

решение2

Использование строковых манипуляций в оболочке:

for name in *.png; do
    # remove everything after the last '-' including the dash
    # and add the '.png' extension back
    newname="${name%-*}.png"
    echo mv "$name" "$newname"
done

Предполагается, что все файлы, которые вы хотите переименовать, находятся .pngв текущем каталоге.

Запустите его один раз и удалите, echoесли вам кажется, что он работает правильно.

Связанный контент