Agregar sufijos aleatorios a los nombres de archivo

Me gustaría cambiar el nombre de archivo de muchos archivos agregando un sufijo aleatorio a los nombres de archivo existentes.

Intenté cambiar este código (cambia el nombre del archivo en lugar de agregar un sufijo) pero no tuve éxito.

#!/bin/bash

chars=( {a..z} {A..Z} {0..9} )

function rand_string {
    local c=$1 ret=
    while((c--)); do
        ret+=${chars[$((RANDOM%${#chars[@]}))]}
    done
    printf '%s\n' "$ret"
}

for file in ~/Desktop/test/*; do
    ext=$(echo ${file} | sed 's,^.*(\.[^\.]*$),\1,')
    mv "$file" ~/Desktop/test/"$file$(rand_string 10)"${ext}
done

Sería preferible una solución de línea de comandos o de automatización

¿Qué has intentado exactamente? ¿Puedes agregar el script que tienes hasta ahora?
actualmente cambié la última línea con una variable adicional pero obtuve un error
#!/bin/bash chars=( {a..z} {A..Z} {0..9} ) function rand_string { local c=$1 ret= while((c--)); do ret+=${chars[$((RANDOM%${#chars[@]}))]} done printf '%s\n' "$ret" } for file in ~/Desktop/test/* do ext= $(echo ${archivo} | sed 's,^.*(\.[^\.]*$),\1,') mv "$archivo" ~/Escritorio/prueba/"$archivo$(rand_string 10 )"${ext} hecho

Respuestas (1)

Si solo desea agregar una cadena aleatoria, el forbucle es bastante simple:

cd ~/Desktop/test/
for file in *; do
    suffix="${file##.*}"
    base="${file%.*}"
    mv "$file" "$base.$(rand_string 10).$suffix"
done

Cambie 10a la cantidad de caracteres aleatorios que desea agregar.

Tnx Patrix por tu respuesta. La secuencia de comandos funciona, pero ahora se agrega el sufijo después de la extensión del archivo. Claramente, no soy bueno para cambiar el código, pero ¿ve alguna forma de agregar el sufijo después del nombre del archivo pero antes de la extensión del archivo?
@El-Ekim Asegúrese de que su pregunta represente todos los hechos. En este caso, habría ayudado tener algunos ejemplos claros de nombres de archivo antes/después.
Tienes razón Patricia. Debería haber dado un ejemplo de la conversión de nombre de archivo. Cuando uso su bucle for, aparece un error que dice: mv: cambiar el nombre de /Users/Ekim/Desktop/test/xmas_candles.jpg a /Users/Ekim/Desktop/test/xmas_candles.HF8ohLw0Gl./Users/Ekim/Desktop/test /xmas_candles.jpg: No existe tal archivo o directorio Muchas gracias por tomarse el tiempo para ayudarme.
@El-Ekim Ah, solo funciona en el directorio actual, por lo que se cdrequiere. Y al mirar su error, es posible que también tenga un error tipográfico en alguna parte.
excelente, funciona muy bien! :) tnx por tu tiempo