Wie lösche ich einen Ordner, behalte aber nur ausgewählte Dateien?

Wie lösche ich einen Ordner, behalte aber nur ausgewählte Dateien?

Meine Ordnerstruktur ist wie folgt:

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

Das geht immer weiter. Mein Ziel ist es, eine Ordnerstruktur wie diese zu haben

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

Ich habe mir überlegt, eine modifizierte Version davon zu machenArtikel Dabei würde ich jedes Verzeichnis durchlaufen und einen regulären Ausdruck ausführen, um nur die Datei mit dem Wert zu erfassen. So etwas wie:

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

Jede Hilfe wäre willkommen

Antwort1

Von der Struktur im erwarteten Ergebnis möchten Sie nur die Dateien behalten, die nicht mit enden .json. So funktioniert es:

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

Suchen Sie im Verzeichnis „Fotos“ nach den Dateien, die nicht auf enden .json, verschieben Sie sie in .oder das aktuelle Verzeichnis und löschen Sie dann die Unterverzeichnisse und die darin enthaltenen Dateien, die Sie nicht benötigen. Sie können auch verwenden, rm -ri 2015*sodass Sie vor dem Entfernen jedes Verzeichnisses gefragt werden, oder führen Sie die Befehle findund rmseparat aus, falls Sie es sich anders überlegen, bevor Sie die restlichen Dateien und deren Verzeichnisse löschen.

verwandte Informationen