
У меня в папке есть куча файлов .jpg, в которых есть неалфавитные символы, такие как ! , ( ) ^ & .
и т. д.
Мне нужно переименовать файлы так, чтобы все, что не является, A-Z a-z 0-9
было заменено ничем. Также пробелы должны быть заменены на -
файлы, также заканчивающиеся на .mp4$$$.jpg, эта часть должна остаться нетронутой.
Например, если файл называется
ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg
Имя файла следует изменить на
ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg
решение1
С помощью bash вы можете сделать следующее:
for f in *.jpg
do
if [[ $f =~ ^(.*)(\.mp[[:digit:]]+\.jpg) ]]
then
prefix=${BASH_REMATCH[1]}
suffix=${BASH_REMATCH[2]}
prefix=${prefix//[^[:alnum:] ]/}
prefix=${prefix// /-}
echo mv -- "$f" "${prefix}${suffix}"
fi
done
Это цикл по *.jpg
файлам и попытка сопоставить каждое имя файла с шаблоном: (что угодно) с последующей .mp
(одной или несколькими цифрами) .jpg
. Если имя файла совпадает, мы разбираем его для переименования. Суффикс содержит точки, поэтому мы сохраняем его отдельно, чтобы удалить все точки в префиксе. После удаления всего, что не является буквенно-цифровым или пробелом, мы заменяем все пробелы на дефисы. Затем имя файла восстанавливается для команды mv
; удалите echo
, если результаты выглядят правильными.
Если вы предпочитаете сохранить дефисы в исходных именах файлов, замените последние два prefix
назначения на следующие:
prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}