
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-9
reemplazado 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 *.jpg
archivos 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 mv
comando; elimine el echo
si los resultados parecen correctos.
Si prefiere mantener guiones en los nombres de archivos originales, cambie las dos últimas prefix
asignaciones por estas:
prefix=${prefix// /-}
prefix=${prefix//[^[:alnum:]-]/}