Usuń katalog pośrednio wewnątrz siebie

9

Mam w sobie katalog. Jak mogę to usunąć?

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

Również

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

Ponadto, chociaż mój mózg nie jest w stanie rozwiązać problemu zatrzymania, wydaje się, że sudo rm -rf devicestrwa on wiecznie, bez wytwarzania wyników.

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

To samo dotyczy perl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'. To samo dotyczy du -s devices/. To samo dotyczy du -sch ~/.local/share/Trash/ innych poleceń

$ 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

Nie chcę, żeby utknęła na zawsze w moim koszu!

Uwaga: po prostu użyłem prymitywnej kopii zapasowej komputera scp, ale zabrakło mi miejsca, a potem tak się stało.

PyRulez
źródło
Pokaż nam polecenie, za pomocą którego próbowałeś je usunąć, i podany błąd. Co ma rm -rf deviceszrobić?
terdon
Proszę również dodać dane wyjściowe ls -dli devicesandls -dli devices/reg-dummy/subsystem/devices/
terdon
3
Pierwszym poleceniem powinno być ls -ldi devices, nie device. Próbuję sprawdzić, czy są to faktycznie twarde łącza (ten sam i-węzeł). Pamiętaj jednak, że jeśli jest to duży katalog, rm -rfzajmie to dużo czasu, ale w końcu zadziała. Jeśli problemem są okrągłe linki, pojawi się komunikat o błędzie dotyczący nieskończonej rekurencji. Jeśli nie ma komunikatu o błędzie, po prostu pozwól mu rm -rfdziałać.
terdon
7
@terdon: Myślałem, że Linux (przynajmniej Ubuntu) nie pozwala na katalogi na stałe?
saiarcot895
2
Zakładam tylko, że próbowałeś z wbudowanym nautilusem przyciskiem „opróżnij kosz”? (może myśleli o takich rzeczach pisząc nautilus ^^)
MrVaykadji

Odpowiedzi:

3

Dane wyjściowe ls -ldipokażą numer i-węzła katalogu. Jeśli katalog w katalogu rzeczywiście ma ten sam numer i-węzła co jego przodek, a nie tylko tę samą nazwę, oznacza to, że twój system plików jest uszkodzony i będziesz musiał uruchomić system w trybie ratunkowym i fsck go.

psusi
źródło
1

Nadal uważam, że rm -rfto zadziała, jeśli dasz mu wystarczająco dużo czasu, ale jeśli nie, jedno lub oba z nich powinny:

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

 

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

Możesz upewnić się, że coś się dzieje, jeśli użyjesz rm -rfv ~/.local/share/Trash/files/devicesco najmniej tego, że będziesz wiedział, że pliki są usuwane.

W każdym razie nie może to stanowić problemu z linkami twardymi (pomimo mojego bardzo złego komentarza), ponieważ katalogów nie można połączyć z linkiem pod Linuxem. Ogólnie rzecz biorąc, gdy masz nieskończoną rekurencję, jak to może się zdarzyć z softlinkami, otrzymasz komunikat o tym, że tak się nie dzieje.

Inną możliwością, o której mogę myśleć, jest to, że folder Kosz jest jakimś dziwnym własnym systemem. Naprawdę nie wiem, jak to działa, nigdy go nie używam. Jednak lepiej mieć szczęście, usuwając pliki najwyższego poziomu bezpośrednio, zamiast celować w problematyczny katalog:

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

Powinieneś także spróbować opróżnić folder Kosz z GUI, po prostu wybierz Kosz i kliknij „Opróżnij Kosz”, aby sprawdzić, czy to zadziała.

terdon
źródło
Oboje zawiedli. Pytanie poprawione.
PyRulez
@PyRulez jak duży jest ten katalog? Ani skrypt perla, ani rmnie wygeneruje żadnych wyników. Jak długo biegali? Zaktualizowałem również findpolecenie, poprzednie było złe, przepraszam. Spójrz na zaktualizowaną odpowiedź. Wreszcie pracujemy tutaj w ciemno. Zaktualizuj swoje pytanie o dane wyjściowe, ls -lgdzie użyłeś ls, a także pokaż wynik du -sch ~/.local/share/Trash/, abyśmy znali rozmiar.
terdon
Nie mogłem znaleźć rozmiaru.
PyRulez
@PyRulez spróbuj du -sch ~/.local/share/Trash/, który da ci rozmiar. I dodaj wszystko, o co proszą różne komentarze, są potrzebne, abyśmy mogli zrozumieć, co się dzieje.
terdon
@tedron Byłem.
PyRulez
0

(Jestem pewien, że to zadziała, a ponieważ zamierzam teraz podróżować, pozostawię to jako odpowiedź, którą mogę usunąć w przyszłości, jeśli to nie zadziała).

  1. Po pierwsze, aby być bezpiecznym, biegnij

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. Po drugie, jeśli wynik „1” nie pokazał żadnego ważnego pliku, uruchom

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. Ostatnim krokiem byłoby

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
desgua
źródło