
Eu tenho muitos arquivos .jpg em uma pasta que contém caracteres não alfabéticos, como ! , ( ) ^ & .
e muito mais.
Preciso renomear os arquivos para que tudo o que não seja A-Z a-z 0-9
substituído por nada. Além disso, os espaços devem ser substituídos pelos -
arquivos que também terminam com .mp4$$$.jpg esta parte precisa permanecer intacta.
Por exemplo, se o arquivo for chamado
ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg
O nome dos arquivos deve ser alterado para
ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg
Responder1
Com o bash, você poderia fazer isso:
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
Isso percorre os *.jpg
arquivos e tenta combinar cada nome de arquivo com o padrão: (anything) seguido por .mp
(one or more digits) .jpg
. Se o nome do arquivo corresponder, nós o separamos para renomeá-lo. O sufixo contém pontos, então o salvamos separadamente para eliminar quaisquer pontos do prefixo. Depois de retirar tudo que não seja alfanumérico ou espaço, substituímos todos os espaços por travessões. O nome do arquivo é então reconstruído para o mv
comando; remova o echo
se os resultados parecerem corretos.
Se você preferir manter os travessões nos nomes dos arquivos originais, troque as duas últimas prefix
atribuições por estas:
prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}