间接删除自身内部的目录

PyR*_*lez 9 filesystem

我里面有一个目录。我如何删除它。

~/.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
Run Code Online (Sandbox Code Playgroud)

~/.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
Run Code Online (Sandbox Code Playgroud)

另外,虽然我的大脑无法解决停机问题,但似乎sudo rm -rf devices永远不会产生输出。

~/.local/share/Trash/files$ sudo rm -rf devices
^C~/.local/share/Trash/files$
Run Code Online (Sandbox Code Playgroud)

同样的事情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
Run Code Online (Sandbox Code Playgroud)

我不想它永远留在我的垃圾桶里!

注意:我只是简单地使用 对计算机进行了粗略的备份scp,但是空间不足,然后发生了这种情况。

psu*_*usi 3

的输出ls -ldi将显示目录的索引节点号。如果目录中的目录确实与其祖先具有相同的 inode 编号,而不仅仅是相同的名称,那么您的文件系统已损坏,您将需要启动到救援模式并对其进行 fsck。


ter*_*don 1

我仍然认为,rm -rf如果你给它足够的时间,这会起作用,但如果没有,其中之一或两者应该:

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

 

find .local/share/Trash/files/ -delete
Run Code Online (Sandbox Code Playgroud)

如果您使用至少会让您知道文件正在被删除,您可以确保正在发生某些事情。rm -rfv ~/.local/share/Trash/files/devices

不管怎样,这不可能是一个硬链接问题(尽管我的评论非常错误),因为在 Linux 下目录不能被硬链接。一般来说,当你有无限递归时,就像软链接可能发生的那样,你会收到一条消息,表明这种情况似乎不会发生。

我能想到的另一种可能性是垃圾文件夹是它自己的一些奇怪的系统。我真的不知道它是如何工作的,我从来没有使用过它。但是,您可能会更好地直接删除顶级文件,而不是针对有问题的目录:

rm -rf ~/.local/share/Trash/* 
Run Code Online (Sandbox Code Playgroud)

您还应该尝试从 GUI 中清空“垃​​圾箱”文件夹,只需选择“垃圾箱”并单击“清空垃圾箱”,看看是否有效。