¿Cómo cambiar el nombre de todos los archivos .jpg en todos los subdirectorios que contienen guiones en Linux?

¿Cómo cambiar el nombre de todos los archivos .jpg en todos los subdirectorios que contienen guiones en Linux?

Tengo subcarpetas con guiones (por ejemplo, subdirectorio con nombre cd). Necesito cambiar el nombre de todos los archivos .jpg en todos los subdirectorios. ¿Algún consejo sobre cómo hacerlo? Probé muchas opciones, pero nada ayudó (creo que porque mis subcarpetas contienen guiones). ¡Gracias chicos! :)

Yo he tratado

find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;

pero consiguiendo

(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"

Respuesta1

No es necesario cambiar el nombre, porque puede hacerlo simplemente con mv.

find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

mv -i significa interactivo. Pregunta antes de sobrescribir.

Esto no es una prueba en profundidad, solo ad hoc, para asegurarse de que los archivos reciban nombres diferentes. Un poco más de prueba sería:

find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

Sin embargo, esto colocará todos los archivos en el directorio actual. ¿Quizás usar -execdir sea una opción?

find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;

Sin embargo, haga una copia de seguridad, tenga cuidado con sus datos, etc. Las acciones masivas con búsqueda son un instrumento afilado. No asumo ninguna responsabilidad.

Los guiones AFAIK no tienen caballos en esta carrera.

Respuesta2

No lo tienes clarocómodesea cambiar el nombre de los archivos. Hastacualarchivos para cambiar el nombre que puede utilizar findpara hacer coincidir todos los archivos según el patrón deseado que contiene un guión:

find [PATH...] -type f -name '*-*' | prename EXPR

Si también desea hacer coincidir directorios, debe usar la -depthopción:

find [PATH...] -depth -name '*-*' | prename EXPR

Respuesta3

Probé esto en subcarpetas con un guión en su nombre y funcionó.

Cambiar el nombre de partes de nombres de archivos de forma recursiva en Linux/Ubuntu

Para cambiar el nombre de los archivos, utilice elencontrarcomando en conjunto con elrebautizarcomando como este:

find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;

Entonces, si desea reemplazar todos los guiones "-" en todos los nombres de archivos jpg con guiones bajos "_", deberá ingresar:

find -type f -execdir rename 's/-/_/' *.jpg '{}' \;

información relacionada