Как удалить папку, но оставить только выбранные файлы?

Как удалить папку, но оставить только выбранные файлы?

Моя структура папок выглядит следующим образом:

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

Это продолжается и продолжается. Моя цель — прийти к такой структуре папок

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

Я рассматривал возможность создания модифицированной версии этогостатья где я бы перебирал каждый каталог и выполнял регулярное выражение, чтобы выбрать только файл со значением. Что-то вроде:

// 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

Любая помощь будет оценена по достоинству.

решение1

Из вашей структуры в ожидаемом результате вы просто хотите сохранить файлы, которые не заканчиваются на .json. Это сделает это:

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

Изнутри каталога Photos вы находите файлы, которые не заканчиваются на .json, перемещаете их в .или текущий каталог, а затем удаляете подкаталоги и файлы внутри, которые вам не нужны. Вы также можете использовать , rm -ri 2015*чтобы он запрашивал вас перед удалением каждого каталога или запускать команды findи rmпо отдельности на случай, если вы передумаете, прежде чем удалять остальные файлы и их каталоги.

Связанный контент