Linux Befehl gesucht um die gleiche Datei in versch. Unterverzeichnissen zu löschen

  • Hallo an Alle,


    wie oben schon beschrieben suche ich eine Linux Befehl um eine Datei, die immer gleich benannt ist in verschiedenen Unterverzeichnissen zu löschen.

    Hatte mich mal auf die Suche gemacht, es müsste

    Code
    find $DIR -name $ENDUNG -exec echo rm -rv {} \;

    heißen, jedoch habe ich ganz viele Dateien mit der Endung (.json), die nicht gelöscht werden sollen, sondern nur eine spezielle (history.javascript.0.Heizung.COP_momentan.json), die es aber in vielen Unterverzeichnissen gibt.

  • Ich wäre mit solchen rekursiven Befehlen immer vorsichtig.

    Es gibt in Linux keinen Papierkorb ;) .

    Wenn die Datei überall gleich heisst, dann gib den vollen Dateinamen an und nicht nur die Extension.


    Gruss

  • Nein, den meine ich nicht.

    Die Frage war CLI orientiert gestellt und rm ist kein Dateimanager. Wird mit rm gelöscht, dann sind die Daten weg.


    Gruss

    Das ändert doch nichts daran, dass ein Papierkorb unter Linux existiert. Auf der Kommandozeile kann man auch einen Papierkorb benutzen. Ich war nur über die Aussage irritiert, dass es keinen Papierkorb gibt. Leute die das lesen könnten es glauben.

  • Das ändert doch nichts daran, dass ein Papierkorb unter Linux existiert.

    Nein, es gibt nur zusätzliche Tools, die eine solche Funktionalität bieten. Aber auch wenn "trash-cli" o.ä. existiert, wird "rm" als GNU/Linux Tool (sofern nicht durch ein Alias geändert) immernoch löschen und nichts in einen Papierkorb irgendeiner Art verschieben. Andere GNU/Linux Tools übrigens auch nicht (unlink, find, etc.pp).

    Menschen die keine Ironie verstehen finde ich super!

  • Unter Linux wird die zu löschende Datei verschoben, sofern man eine Anwendung verwendet, die das auch macht.

    Die meisten Programme rufen die syscalls direkt, was auch die Datei direkt löscht. Da ist kein Hook dazwischen, der das verhindert.


    Wie so ein Code aussieht, der das behandelt: https://github.com/arsenetar/s…/send2trash/plat_other.py


    Etwas vereinfacht:

    Edited once, last by DeaD_EyE ().

  • Es gibt ein tool dafür, namens "dupdel". Es kann doppelte Dateien finden, selbst wenn diese unterschiedlich heissen.


    Code
    dupdel --master /pfad/wo/nie/gelöscht/wird --slave /pfad/wo/doppelte/gefunden/werden


    Dieses Tool ist extra dafür gedacht, doppelte Dateien zu eliminieren. Hierzu gibt man zwei Pfade an, einen master und einen slave. Kurz gesagt werden alle Dateien on slave, die (mindestens ein) ein Orginal in master haben, gelöscht.


    In dieser Version wird noch nix gelöscht, sondern es werden nur die doppelten aufgelistet. Wenn man damit zufrieden ist, dann kann man noch ein "-k" an das Kommando hängen, und dann werden alle doppelten Dateien im slave Pfad gelöscht.


    Es gibt auch noch ein anderes Tool (es heisst dupseek) und hat eine Menge Kommandozeilenoptionen, kann auch interaktiv benutzt werden und findet alle doppelten in einem oder meheren Verzeichnispfaden. Es fragt dann jeweils, welche der gleichen Dateien behalten werden sollen. Ich fand es etwas umstaendlicher, ist aber der einzige Weg, wenn man die Doppelten nicht in einem separaten Verzeichnis-Ast hat (wie oben bei master und slave).


    Es hat aber noch mehr nützliche features: z.B. Doppelte Dateien durch Sym-Links ersetzten oder durch hard-links.



    Auf dieser Seite werden noch mehr tools aufgelistet:


    https://askubuntu.com/question…nd-delete-duplicate-files


    Ich hoffe, das hat schonmal geholfen...

  • Unter Linux wird die zu löschende Datei verschoben, sofern man eine Anwendung verwendet, die das auch macht.

    Die meisten Programme rufen die syscalls direkt, was auch die Datei direkt löscht. Da ist kein Hook dazwischen, der das verhindert.

    Ich war bis jetzt der Meinung, das beim Löschen mit rm nur die Zuordnung der Daten zu den i-Nodes aufgehoben wird, d.h. die Daten sind noch bis zum nächstem Schreibvorgang des Datenblocks, vorhanden. Wenn man also seinen Fehler rechtzeitig erkennt und das Filesystem an dem Über-/ Beschreiben freier Blöcke hindert, dann sollte mit Tools wie exundelete, photorec usw. mit etwas Glück eine Wiederherstellung der gelöschten Daten möglich sein.

  • DeaD_EyE hat doch auch nichts anderes behauptet. Bzw. das löschen = überschreiben bedeutet. Vielleicht gibt es aber auch ein Dateisystem, oder Einstellung, die beim löschen einer Datei diese überschreibt?

  • Ich war bis jetzt der Meinung, das beim Löschen mit rm nur die Zuordnung der Daten zu den i-Nodes aufgehoben wird, d.h. die Daten sind noch bis zum nächstem Schreibvorgang des Datenblocks, vorhanden

    Das stimmt auch so. Es wird nur der Inode gelöscht.


    Ich hätte es anders formulieren sollen: Damit gelöschte Dateien auch im Papierkorb auftauchen, muss sich die Anwendung explizit darum kümmern oder ggf. eine Bibliothek dafür nutzen. Löscht man hingegen eine Datei mit rm, so landet diese nicht im Papierkorb, da der syscall zum Löschen einer Datei aufgerufen wird.


    Unter Windows ist das bestimmt ein bisschen anders geregelt, aber auch dort löscht del eine Datei und sie wird nicht in den Papierkorb verschoben.


    Löschen == Nur aus dem "Inhaltsverzeichnis" streichen.

  • Hallo nochmal,


    leider funktioniert das Löschen nicht mehr.


    z.B.

    Code
    sudo find $DIR -name 'history.modbus.0.inputRegisters.30529_Gesamtertrag_Wh.json' -delete



    ...passiert nichts. Die Dateien sind noch immer da.


    Für "DIR" hatte ich auch mal "/opt/iobroker/" angegeben, hier wir aber Datei oder Verzeichnis nicht gefunden

  • Nimm das -delete weg, dann siehst du, ob er überhaupt was findet.


    Außerdem nutzt du keinen Wildcard *, also kannst du nur diese eine Datei finden, sofern sie überhaupt existiert.


    So könntest du gleich mehrere Dateien aufeinmal löschen:

    Code
    sudo find $DIR -name 'history.modbus.0.inputRegisters.*.json'

    -delete habe ich mit Absicht weggelassen. Bevor man das macht, sollte immer geprüft werden, ob die gefundenen Dateien wirklich gelöscht werden sollen.