Renomeie caracteres não alfabéticos e numéricos em arquivos sem nada

Renomeie caracteres não alfabéticos e numéricos em arquivos sem nada

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-9substituí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 *.jpgarquivos 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 mvcomando; remova o echose os resultados parecerem corretos.

Se você preferir manter os travessões nos nomes dos arquivos originais, troque as duas últimas prefixatribuições por estas:

prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}

informação relacionada