¿Cómo elimino una carpeta pero solo conservo los archivos seleccionados?

¿Cómo elimino una carpeta pero solo conservo los archivos seleccionados?

Mi estructura de carpetas es la siguiente:

Photos
|
|---> 2015-08-23
      |
      |---> IMG_0019.JPG           // keep
            IMG_0019.JPG.json      // toss
            IMG_0020.JPG           // keep
            IMG_0020.JPG.json      // toss
            IMG_0021.JPG           // keep
            IMG_0021.JPG.json      // toss
            metadata.json          // toss

      2015-08-24
      |
      |---> IMG_0242.MP4           // keep
            IMG_0242.MP4.json      // toss
            metadata.json          // toss

      2015-08-25
      |
      |---> IMG_0243.MOV           // keep
            IMG_0243.MOV.json      // toss
            IMG_0243(1).MOV        // keep
            IMG_0243(1).MOV.json   // toss
            IMG_0244.PNG           // keep
            IMG_0019.PNG.json      // toss
            metadata.json          // toss

Esto sigue y sigue. Mi objetivo es terminar con una estructura de carpetas como esta.

Photos
|
|--> IMG_0019.JPG
     IMG_0020.JPG
     IMG_0021.JPG
     IMG_0242.MP4
     IMG_0243.MOV
     IMG_0243(1).MOV
     IMG_0244.PNG
     ...

Estaba pensando en hacer una versión modificada de esto.artículo donde recorrería cada directorio y realizaría una expresión regular para capturar solo archivos de valor. Algo como:

// get a list of all directories
// loop through directories
//     get all contents in directory
//     loop through all contents in directory
//        determine if file is of value (ie. MP4, PNG, MOV, JPG, etc.)
//        move selected file out to parent directory
//        remove directory

Cualquier ayuda sería apreciada

Respuesta1

Desde la estructura en el resultado esperado, solo desea conservar los archivos que no terminan en .json. Esto lo hará:

cd Photos
find . -type f ! -name *.json -exec mv {} . \; && rm -rf 2015*

Desde el interior del directorio Fotos, encuentra los archivos que no terminan en .json, los mueve .al directorio actual y luego elimina los subdirectorios y los archivos que no desea. También puede usarlo rm -ri 2015*para que le avise antes de eliminar cada directorio o ejecutar los comandos findy rmpor separado en caso de que cambie de opinión antes de eliminar el resto de los archivos y sus directorios.

información relacionada