Directorys aufräumen

  • Hallo Zusammen,


    ich brauche mal Hilfe beim shellscripten. Ich brauche ein Script, das rekursiv durch Verzeichnisse geht und dort alles löscht was nicht explizit angegeben wird (also z.B. alles ausser *.mp3 und *.ogg).


    Ich will damit u.a. mein Bilderverzeichniss von den lästigen Thumb.db säubern die meine Frau regelmäßig erzeugt, wenn die mit Windows darin herumackert.


    vielen Dank


    steffx

  • hallo slime,


    deine lösung ist genau das was ich gesucht habe.
    leider scheint sie nicht mit meinen Verzeichnissnamen klar zu kommen ...


    rm: cannot remove `/test/ACDC/Back': No such file or directory
    rm: cannot remove `in': No such file or directory
    rm: cannot remove `Black/test.txt': No such file or directory


    gibts dafür auch ne Lösung ?


    steffx

  • Hi,


    hast Leerzeichen in den vErzeichnisnamen, also muss der Verzeichnisname in Anführungszeichen gesetzt werden, sonst sieht find oder grep das als weiteren Parameter an...


    bye


    Sven


    Link: Richtig fragen

  • ok, wie wärs damit :


    Code
    find "/hier/ist mein quellverzeichnis" -follow -type f ! -iregex '.*/.*\.mp3' ! -iregex '.*/.*\.ogg' -exec rm "{}" \;


    find "/hier/ist mein quellverzeichnis" ... sollte klar sein
    -follow ... damit folgt der find symlinks
    -type f ... damit werden nur Dateien gefunden, keine Dirs
    -iregex '.*/.*\.mp3' ... das ist ein regulärer Ausdruck, der auf den gesamten Pfad angewendet wird.


    .*/ matcht jede bel. Direktorystruktur
    .*\.mp3 matcht alle *.mp3 Dateien


    mit dem "!" vor dem -iregex gilt dieser Ausdruck als negiert, also alle Dateien AUSSER *.mp3
    mehrere dieser Ausdrücke können aneinandergehängt werden.


    -exec rm "{}" \; ... damit werden die gefundenen Dateien gelöscht.


    Zum Testen empfehle ich -exec echo rm {} \; zu verwenden, dann kann man ersmal gucken, welche Dateien er löschen wird.
    also:


    Code
    find "/hier/ist mein quellverzeichnis" -follow -type f ! -iregex '.*/.*\.mp3' ! -iregex '.*/.*\.ogg' -exec echo rm "{}" \;


    Achtung: der letzte ; muss escaped sein, sonst klappts nicht.



    --
    Zuck

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!