Видалити каталог побічно всередині себе


9

У мене є каталог всередині себе. Як її видалити.

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

Також

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

Крім того, хоча мій мозок не може вирішити проблему зупинки, але, здається, це sudo rm -rf devicesтриває назавжди, не даючи результатів.

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

Те саме для perl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'. Те саме для du -s devices/. Те саме для du -sch ~/.local/share/Trash/ інших команд

$ 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

Я не хочу, щоб він назавжди застряг у моєму смітнику!

Примітка. Я робив грубу резервну копію комп'ютера, просто використовуючи scp, але мені не вистачало місця, і тоді це сталося.


Будь ласка, покажіть нам команду, з якою ви намагалися її видалити, та помилку, яку вона вам дала. Що робить rm -rf devices?
тердон

Будь ласка, додайте також вихід ls -dli devicesтаls -dli devices/reg-dummy/subsystem/devices/
terdon

3
Перша команда повинна була бути ls -ldi devices, ні device. Я намагаюся дізнатися, чи це насправді жорсткі посилання (той самий вклад). Однак майте на увазі, що якщо це великий каталог, rm -rfце займе багато часу, але з часом воно спрацює. Якщо тут йдеться про кругові посилання, ви отримаєте повідомлення про помилку про нескінченну рекурсію. Якщо повідомлення про помилку відсутнє, просто дайте rm -rfзапустити його хід.
тердон

7
@terdon: Я думав, що Linux (принаймні Ubuntu) не дозволяє жорстко пов'язані каталоги?
saiarcot895

2
Я просто припускаю, що ви спробували за допомогою вбудованої кнопки "пусте сміття" nautilus? (можливо, вони думали про такі речі, коли писали nautilus ^^)
MrVaykadji

Відповіді:


3

Вихідні дані ls -ldiпокажуть номер inode каталогу. Якщо каталог у каталозі дійсно має той самий номер inode, що і його пращур, а не лише те саме ім'я, то ваша файлова система пошкоджена, і вам потрібно буде завантажитися в режим порятунку і переламати його.


1

Я все ще думаю, що rm -rfце спрацює, якщо ви приділите йому достатньо часу, але якщо ні, то один чи обидва повинні:

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

 

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

Ви можете переконатися, що щось відбувається, якщо ви використаєте rm -rfv ~/.local/share/Trash/files/devicesпринаймні те, що дозволить вам знати, що файли видаляються.

У всякому разі, це не може бути проблемою з жорстким посиланням (незважаючи на мій дуже неправильний коментар), оскільки каталоги не можуть бути жорстко посиланнями під Linux. Взагалі, якщо у вас є нескінченна рекурсія, як це може статися з програмними посиланнями, ви отримаєте повідомлення про це, що, здається, не відбудеться.

Інша можливість, яку я можу придумати, - це те, що папка Trash є якоюсь дивною системою. Я не знаю, як це працює, я ніколи його не використовую. Однак, можливо, вам пощастить видалити файли верхнього рівня безпосередньо, а не орієнтуватися на проблемний каталог:

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

Також слід спробувати спорожнити папку Сміття з графічного інтерфейсу, просто виберіть Кошик і натисніть «Порожня кошик», щоб побачити, чи це працює.


Вони обоє провалилися. Питання переглянуто.
PyRulez

@PyRulez, наскільки великий цей каталог? Ні сценарій perl, ні rmволя не дадуть жодного результату. Як довго вони бігали? Я також оновив findкоманду, попередня помилялась, вибачте. Подивіться оновлену відповідь. Нарешті, ми тут працюємо сліпими. Будь ласка, оновіть своє запитання виведенням місця, ls -lде ви використовували ls, також покажіть результат, du -sch ~/.local/share/Trash/щоб ми знали розмір.
тердон

Я не зміг знайти розмір.
PyRulez

Спробуйте @PyRulez, du -sch ~/.local/share/Trash/який надасть вам розмір. І будь ласка, додайте всі матеріали, про які просили різні коментарі, вони потрібні, щоб ми могли зрозуміти, що відбувається.
тердон

@tedron Я був.
PyRulez

0

(Я впевнений, що це спрацює, і оскільки я зараз подорожую, я залишаю це як відповідь, яку в майбутньому я можу видалити, якщо це не вийде.)

  1. По-перше, щоб бути в безпеці, бігайте

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. По-друге, якщо на виході "1" не було показано жодного важливого файлу, тоді запустіть

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. Заключний крок був би

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.