
Я пытаюсь заменить 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
если вам кажется, что он работает правильно.