[gelöst]Mülleimer leeren nicht möglich!

Hinweis: In dem Thema [gelöst]Mülleimer leeren nicht möglich! gibt es 9 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hi,


    habe paar Ordner in den Mülleimer verschoben und nun kann ich diese nicht mehr aus dem Mülleimer entfernen. Es kommt eine Rückmeldung " Datei /home/user/.local/share/Trash/files/css/css/img/left_top_img - ??+t?+.gif kann nicht gelöscht werden".
    Lassen sich auch nicht ins Dolphin (Systemverwaltungsmodus) verschieben, dass ich dort mit Root-Rechte vielleicht eine Chance hätte.


    Ebenfalls habe ich paar Ordner die ich nicht in den Mülleimer verschieben kann. Kommt dann die Rückmeldung "default_rtl - ??+t?+.css existiert nicht".


    Git es ein Programm das mit solchen hartnäckigen Ordner, Dateien fertig wird?


    so long.

    Einmal editiert, zuletzt von Altritschi ()

    Für den Inhalt des Beitrages 54093 haftet ausdrücklich der jeweilige Autor: Altrici

  • Hallo,


    eine Möglichkeit von mir. :D


    1. Eine Konsole öffnen.
    2. su eingeben.
    3. mit cd ins entsprechende Verzeichnis wechseln.
    4. jetzt versuchen, mit : rm <Dateiname> - eine Datei löschen
    oder : rmdir <Verz.Name> - ein Verzeichnis löschen.



    Über eine positive Rückmeldung würde ich mich tierisch freuen.
    ;) weiterhin viel Spaß :!:

  • Was auf jeden Fall geht, ist der -etwas brutale- Löschbefehl

    Code
    rm -rf /home/$USER/.local/share/Trash/*

    Dein Problem scheint zu sein, dass du Leer- und Sonderzeichen in den Dateinamen hast.
    Die kannst du trotzdem alle nach Belieben matlrätieren, wenn du sie "quotest".

    Code
    rm 'Datei die blöde /(*Zeichen und Ümläute ? irgend§wo_im Namen hat'

    Beachte den Apostroph (der, der mit <umschalt><#> erzeugt wird), der am Anfang und am Ende des Names steht.

    Ein Fragezeichen in einem Namen würde von der bash als Wildcard, an dessen Stelle jedes beliebige Zeichen stehen kann.
    Aber eben nicht die Sonderzeichen, wie ?* selbst.
    Wenn man irgendetwas in diese einfachen Hochkomma (<umschalt><#>) setzt, so ist alles innerhalb dieser Zeichen nur noch das Zeichen selbst.


    Es ist bei Linuxdateien jedes Zeichen erlaubt, außer der binären Null \0 und dem Pfadtrenner "/" selbst.
    Kann man schon verwenden, wenn man das Quoting berücksichtigt.

    Einmal editiert, zuletzt von uhelp ()

    Für den Inhalt des Beitrages 54098 haftet ausdrücklich der jeweilige Autor: uhelp

  • hallo boser,


    die Dateien und Ordner die nicht im Mülleimer waren habe ich mit Deiner Methode zum löschen gebracht. War aber sehr mühselig. Habe über 1Stunde gebraucht. Dateien und Ordner die im Mülleimer nicht zu löschen waren, da hat mir uhelp weiterhelfen können.
    Vielen Dank für die Hilfe.



    hallo uhelp,


    durch Deine Hilfe weiß ich endlich im welchen Pfad der Mülleimer zu finden ist.
    /home/$USER/.local/share/Trash/ und dort bin ich dann zum Teil mit rm -rf weiter gekommen.


    Quellcode:
    1 rm 'Datei die blöde /(*Zeichen und Ümläute ? irgend§wo_im Namen hat'


    Diesen Quellcode habe ich nur zum Teil verstanden, konnte aber keine Verwendung finden, so dass ich doch die ganzen Zeichen wie ?+- explizit eingegeben hatte. Eine Schwierigkeit hatte ich noch, und das war das Leerzeichen. Diesen musste ich dann durch einen verkehrten Schrägstrich (Backslash) mit nachfolgendem Leerzeichen eingeben. Wie sagt man da doch gleich noch? Das muss man auch im php machen. Wenn man z.Bsp. den "Text ausgeben will mit dem Anführungsstrichen" muss davor ein Backslash \"text\" stehen.


    Sollte mich mal wieder mit PHP - Programmierung beschäftigen.


    Vielen Dank für die Hilfe


    so long.

    Für den Inhalt des Beitrages 54134 haftet ausdrücklich der jeweilige Autor: Altrici

  • von PHP rate ich ebenso dringend ab, wie von Java.
    Man muss nicht vorsätzlich ein sicheres System verunsichern.


    Das Wort, das du suchtest heißt "quoten" oder auch "escapen".


    Die bash kennt mehrere Spezialzeichen.
    So steht ein "*" für Null oder beliebig viele Zeichen anstelle des Sterns.
    Ein "?" steht für genau ein beliebiges Zeichen.


    Und die bash kennt einige "Befehlstrenner" nämlich Strichpunkt, Leerzeichen, Doppelpunkt (ist nicht nur Trenner sondern sogar tatsächlich ein Befehl, der NoOPeration-Befehl), und einen Backslash, der alleine am Ende einer Zeile steht, und natürlich den Zeilentrenner (\n] selbst.
    Ist eines dieser Zeichen in einem Dateinamen, muss man es mit einem vorangestellten "\" "quoten. Damit verliert es seine Sonderbedeutung und wird zum "Buchstaben" innerhalb eines Dateinamens.


    Man sollte auf solche Spielchen verzichten.


    Hat man das Problem doch, kann man sie ganz einfach dennoch bearbeiten.
    Der folgende Befehl nutzt die Fähigkeit von "find" Dateinamen durch eine binäre Null voneinander getrennt auszugeben und eine weitere Fähigkeit auf gefundene Dateien einen Befehl(skette) anzuwenden:

    Code
    find  /Pfad/zu/dir/ab/dem/alles/gefunden/werden/soll   -name '*' -print0 -exec rm {} \;

    Das sieht ziemlich kryptisch aus, und liest sich einfach so:
    "find"e
    ab dem Verzeichnis /Pfad/zu..... und in allen Unterverzeichnissen dort alle Dateien mit
    -name(n) '*' Beachte, dass ich den Stern, der hier für alles steht, gequotet habe, damit die Bash ihn nicht interpretiert, sondern der Befehl "find" ihn erhält.


    Wir suchen also in allen Unterverzeichnissen ab /Pfad... alle Dateien mit belibigen Namen.
    Jetzt umgehen wir alle Sonder- und Trennzeichen, indem wir als Listentrenner bei den gefundenen Dateien eine binäre Null verlangen:
    -print0


    und lassen auf jeden gefundenen Dateinamen
    -exec rm {}
    los. Das Klammerpaar steht bei jedem Aufruf von "rm" für eine gefundene Datei.


    Da man auch ganze Befehlsketten angeben kann, muss "find" irgendwie mitgeteilt werden, wann diese Kette zu Ende ist, also ist ein ";" am Ende zwingend. Und damit die ausführende Bash das Semikolon nicht selbst interpretiert, müssen wir es wieder mit Backslash schützen.
    \;


    Mit dem Befehl wärst du "etwas" schneller zum Ziel gekommen.

    Einmal editiert, zuletzt von Sauerland ()

    Für den Inhalt des Beitrages 54142 haftet ausdrücklich der jeweilige Autor: uhelp

  • Code
    find  /Pfad/zu/dir/ab/dem/alles/gefunden/werden/soll   -name '*' -print0 -exec rm {} \;

    Das sieht ziemlich kryptisch aus ...

    Das sieht nicht nur so kryptisch aus...


    Wer sich das exec-rm-Geraffel sparen möchte, lässt alles direkt von find löschen:

    Code
    find  /Pfad/zu/dir/ab/dem/alles/gefunden/werden/soll -name '*' -delete
  • Es mag halt nicht immer nur um Löschen gehen.


    Der Befehl "find", wenn man ihn denn kann, sieht bei versierter Nutzung immer kryptisch aus.
    Ist halt noch gutes altes Unix.

    Für den Inhalt des Beitrages 54184 haftet ausdrücklich der jeweilige Autor: uhelp

  • ... wenn man ihn denn kann ...

    ... hätte man sich das - im konkreten Beispiel komplett überflüssige - print0 gespart und die Fähigkeit von rm genutzt, mehrere Dateinamen gleichzeitig anzunehmen:

    Code
    find  /Pfad/ -name '*' -exec rm {} +


    Und nun dürfen die Mods unsere Diskussion wieder löschen, aber vielleicht liest es ja vorher noch jemand... :rolleyes:

  • Auch eine Möglichkeit "find" zu nutzen.


    Am Rande: Auch mit "-exec" simuliert "find" ein xarg. Es wird also -so oder so- genutzt.

    Für den Inhalt des Beitrages 54190 haftet ausdrücklich der jeweilige Autor: uhelp