1 votos

Anteponer el nombre de la carpeta al nombre del archivo

Estoy tratando de añadir el nombre de la carpeta a los nombres de los archivos contenidos en las carpetas y subcarpetas. @nohillside ya ha proporcionado un comando que resuelve en parte este problema; ver Anteponer los nombres de las carpetas a los de los archivos y aplanar la estructura de los mismos .

El comando de @nohillside hace exactamente lo que busco, pero además también mueve todos los archivos fuera de sus carpetas hasta la carpeta desde donde se ejecuta el comando. ¿Hay alguna manera de cambiar este comando, para que los archivos permanezcan en sus carpetas originales?

Antes de

$ tree
.
 Ts4650_it
    IMG_3526.jpeg
    IMG_3527.jpeg
    IMG_3528.jpeg
    IMG_3529.jpeg
 Ts5540_fb
    IMG_2139.jpeg
    Ts5540_fb_2
        IMG_2141.jpeg
        IMG_2145.jpeg
 Ts5549_hv
    IMG_3452.jpeg
.
.

Después de

$ tree
.
 Ts4650_it
    Ts4650_it_IMG_3526.jpeg
    Ts4650_it_IMG_3527.jpeg
    Ts4650_it_IMG_3528.jpeg
    Ts4650_it_IMG_3529.jpeg
 Ts5540_fb
    Ts4650_it_IMG_2139.jpeg
    Ts5540_fb_2
        Ts5540_fb_2_IMG_2141.jpeg
        Ts5540_fb_2_IMG_2145.jpeg
 Ts5549_hv
    Ts5549_hv_IMG_3452.jpeg
.
.

2voto

Asumiendo una estructura simple que sólo tiene un nivel de profundidad, corriendo

find . -type f -maxdepth 2 \
    -exec sh -c 'for f do df=${f#./}; d=${f%/*}; echo mv "$f" "$d/${df////_}"; done' {} +

en la carpeta de nivel superior debería funcionar.

Si la jerarquía de carpetas es más profunda, sustituya -maxdepth 2 con lo que sea apropiado (o simplemente omitir esa parte).

PS: Tal y como está escrito esto sólo imprimirá el mv comandos sin ejecutarlos. Si se ven bien, eliminar el echo para renombrar realmente los archivos.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X