Verzeichnis indirekt in sich selbst löschen

9

Ich habe ein Verzeichnis in sich. Wie lösche ich es?

~/.local/share/Trash/files$ ls devices/
reg-dummy
~/.local/share/Trash/files$ ls devices/reg-dummy/
subsystem
~/.local/share/Trash/files$ ls devices/reg-dummy/subsystem/
devices

Ebenfalls

~/.local/share/Trash/files$ find devices/ | head -n 20
devices/
devices/reg-dummy
devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy

Auch wenn mein Gehirn das Problem des Anhaltens nicht lösen kann, scheint es, dass es sudo rm -rf devicesfür immer weitergeht, ohne Ausgabe zu produzieren.

~/.local/share/Trash/files$ sudo rm -rf devices
^C~/.local/share/Trash/files$

Gleiches für perl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'. Gleiches für du -s devices/. Gleiches gilt für du -sch ~/.local/share/Trash/ andere Befehle

$ cd ~/.local/share/Trash/files/devices/reg-dummy/subsystem/devices/
$ ls -ldi 
8131921 drwxr-xr-x 3 theking theking 4096 Mar 17 19:43 .
$ cd reg-dummy/subsystem/devices/
$ ls -dli
8131926 drwxr-xr-x 3 theking theking 4096 Mar 17 19:43 .


$ find .local/share/Trash/files/ -maxdepth 1 -delete
find: cannot delete `.local/share/Trash/files/devices': Directory not empty
find: cannot delete `.local/share/Trash/files/': Directory not empty

Ich möchte nicht, dass es für immer in meinem Müll steckt!

Hinweis: Ich habe ein einfaches Backup eines Computers erstellt, indem ich es einfach verwendet habe scp, aber mir ist der Speicherplatz ausgegangen, und dann ist dies passiert.

PyRulez
quelle
Bitte zeigen Sie uns den Befehl, mit dem Sie versucht haben, ihn zu löschen, und den Fehler, den Sie erhalten haben. Was macht rm -rf devicesdas
Terdon
Bitte fügen Sie auch die Ausgabe von ls -dli devicesandls -dli devices/reg-dummy/subsystem/devices/
terdon
3
Der erste Befehl hätte sein sollen ls -ldi devices, nicht device. Ich versuche zu sehen, ob es sich tatsächlich um Hardlinks handelt (der gleiche Inode). Beachten Sie jedoch, dass ein großes Verzeichnis zwar rm -rflange dauert, aber möglicherweise funktioniert. Wenn es sich hier um zirkuläre Links handelt, wird eine Fehlermeldung zur unendlichen Rekursion angezeigt. Wenn es keine Fehlermeldung gibt, lassen Sie es einfach rm -rflaufen.
Terdon
7
@terdon: Ich dachte, Linux (zumindest Ubuntu) erlaubt keine fest verknüpften Verzeichnisse?
Saiarcot895
2
Ich gehe nur davon aus, dass Sie es mit dem in Nautilus integrierten "leeren Papierkorb" versucht haben? (Vielleicht haben sie beim Schreiben von Nautilus an
solche

Antworten:

3

Die Ausgabe von ls -ldizeigt die Inode-Nummer des Verzeichnisses an. Wenn das Verzeichnis innerhalb des Verzeichnisses tatsächlich dieselbe Inode-Nummer wie sein Vorfahr hat und nicht nur denselben Namen, ist Ihr Dateisystem beschädigt und Sie müssen in den Rettungsmodus booten und es überprüfen.

psusi
quelle
1

Ich denke immer noch, dass rm -rfdas funktionieren wird, wenn Sie genug Zeit dafür geben, aber wenn nicht, sollten einer oder beide davon:

perl -e 'use File::Path qw(remove_tree); 
        remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'`

 

find .local/share/Trash/files/ -delete

Sie können sicherstellen, dass etwas passiert, wenn Sie rm -rfv ~/.local/share/Trash/files/devicesmindestens das verwenden, um zu erfahren, dass Dateien gelöscht werden.

Auf jeden Fall kann dies kein Hardlink-Problem sein (trotz meines sehr falschen Kommentars), da Verzeichnisse unter Linux nicht fest verlinkt werden können. Wenn Sie eine unendliche Rekursion haben, wie dies bei Softlinks der Fall sein kann, erhalten Sie im Allgemeinen eine entsprechende Meldung, die anscheinend nicht auftritt.

Die andere Möglichkeit, die ich mir vorstellen kann, ist, dass der Papierkorb ein seltsames System für sich ist. Ich weiß nicht wirklich, wie es funktioniert, ich benutze es nie. Möglicherweise haben Sie jedoch besseres Glück, wenn Sie die Dateien der obersten Ebene direkt löschen, anstatt auf das problematische Verzeichnis abzuzielen:

rm -rf ~/.local/share/Trash/* 

Sie sollten auch versuchen, den Papierkorbordner über die GUI zu leeren. Wählen Sie einfach Papierkorb aus und klicken Sie auf "Papierkorb leeren". Überprüfen Sie, ob dies funktioniert.

Terdon
quelle
Sie haben beide versagt. Frage überarbeitet.
PyRulez
@ PyRulez Wie groß ist dieses Verzeichnis? Weder das Perl-Skript noch das rmwerden eine Ausgabe erzeugen. Wie lange sind sie gelaufen? Ich habe auch den findBefehl aktualisiert , der vorherige war falsch, sorry. Schauen Sie sich die aktualisierte Antwort an. Schließlich arbeiten wir hier blind. Bitte aktualisieren Sie Ihre Frage mit der Ausgabe von ls -lwo Sie verwendet haben ls, zeigen Sie auch das Ergebnis von, du -sch ~/.local/share/Trash/damit wir die Größe kennen.
Terdon
Ich konnte die Größe nicht finden.
PyRulez
@ PyRulez versuchen du -sch ~/.local/share/Trash/, das gibt Ihnen die Größe. Und bitte fügen Sie all die Dinge hinzu, nach denen die verschiedenen Kommentare gefragt haben. Sie werden benötigt, damit wir verstehen, was los ist.
Terdon
@tedron Ich war.
PyRulez
0

(Ich bin zuversichtlich, dass dies funktionieren wird, und da ich jetzt reisen werde, werde ich dies als Antwort belassen, die ich in Zukunft löschen kann, wenn es nicht funktioniert.)

  1. Um sicher zu gehen, laufen Sie zuerst

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. Zweitens, wenn die Ausgabe von "1" keine wichtige Datei zeigte, dann ausführen

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. Der letzte Schritt wäre

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
Desgua
quelle