Tengo un montón de carpetas con varios nombres, por ejemplo
2013-02 Snow and birds
PICT0001.jpg
PICT0002.jpg
2013-06 Bicycle trip
edited_panorama.jpg
From phone
DCIM0001.jpg
DCIM0002.jpg
DCIM0003.jpg
From camera
DSLR
PICT0001.raw
PICT0002.raw
Compact
S0000001.jpg
Como puede ver, la estructura general es un nivel variable de subcarpetas anidadas que contienen imágenes. Lo que quiero hacer es aplanar la estructura, agregando el nombre de cada nivel de subcarpetas al nombre del archivo, de esta manera:
2013-02 Snow and birds_PICT0001.jpg
2013-02 Snow and birds_PICT0002.jpg
2013-06 Bicycle trip_edited_panorama.jpg
2013-06 Bicycle trip_From phone_DCIM0001.jpg
2013-06 Bicycle trip_From phone_DCIM0002.jpg
2013-06 Bicycle trip_From phone_DCIM0003.jpg
2013-06 Bicycle trip_From camera_DSLR_PICT0001.raw
2013-06 Bicycle trip_From camera_DSLR_PICT0002.raw
2013-06 Bicycle trip_From camera_Compact_S0000001.jpg
¿Cómo se puede lograr esto utilizando un script de Terminal o cualquier otro tipo de script? He encontrado algunas soluciones similares, pero todas parecen depender de un nivel fijo de subcarpetas, mientras que la estructura de mi carpeta varía.
Para los propósitos de este script, tenía todas sus carpetas contenidas en una carpeta llamada "Filez" en mi escritorio. Este script comienza con un cuadro de diálogo "elegir carpeta" para elegir la carpeta que contiene en la que residen las carpetas "Viaje en bicicleta 2013-06" y "Nieve y pájaros 2013-02". Esto devolverá todos los archivos individuales dentro de todas las carpetas y subcarpetas, de las cuales desea que se cambien los nombres.
fuente
La respuesta de @nohillside anterior es genial en realidad. El único problema es que no tiene en cuenta los archivos con espacios en ellos. Eso hará que algunos de los comandos fallen.
Así que estoy poniendo una respuesta aquí que apoyaría eso también.
Esto solo mostrará
echo
losmv
comandos:Esto solo enviará
echo
losmv
comandos directamente a su mesa de trabajo:[Cuidado] Esto ejecutará inmediatamente los
mv
comandos para usted:fuente
echo
modo con una copia directa y pegar, funciona para la mayoría de los archivos, excepto para aquellos que escupen el error que explica el uso de mvusage: mv [-f | -i | -n] [-v] source target