Cambie el nombre de caracteres no alfabéticos y numéricos en archivos sin nada

Cambie el nombre de caracteres no alfabéticos y numéricos en archivos sin nada

Tengo un montón de archivos .jpg en una carpeta que tienen caracteres no alfabéticos como ! , ( ) ^ & .y más.

Necesito cambiar el nombre de los archivos para que todo lo que no sea A-Z a-z 0-9reemplazado por nada. Además, los espacios deben reemplazarse con -los archivos que también terminan en .mp4$$$.jpg. Esta parte debe permanecer intacta.

Por ejemplo, si el archivo se llama

ask me anything.mp4001.jpg
ask, me. anything! 2.mp4001.jpg

El nombre de los archivos debe cambiarse a

ask-me-anything.mp4001.jpg
ask-me-anything-2.mp4001.jpg

Respuesta1

Con bash, puedes hacer esto:

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

Esto recorre los *.jpgarchivos e intenta hacer coincidir cada nombre de archivo con el patrón: (cualquier cosa) seguido de .mp(uno o más dígitos) .jpg. Si el nombre del archivo coincide, lo separamos para cambiarle el nombre. El sufijo contiene puntos, por lo que lo guardamos por separado para eliminar los puntos del prefijo. Después de eliminar todo lo que no sea alfanumérico o espacio, reemplazamos todos los espacios con guiones. Luego se reconstruye el nombre del archivo para el mvcomando; elimine el echosi los resultados parecen correctos.

Si prefiere mantener guiones en los nombres de archivos originales, cambie las dos últimas prefixasignaciones por estas:

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

información relacionada