间接删除目录本身

间接删除目录本身

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

~/.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,但是空间不足,然后发生了这种情况。

答案1

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

答案2

我仍然认为,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 下目录不能硬链接。通常,当您有无限递归时(软链接可能发生这种情况),您会收到一条消息,但似乎不会发生这种情况。

我能想到的另一种可能性是,垃圾文件夹本身就是一个奇怪的系统。我真的不知道它是如何工作的,我从来没有用过它。不过,直接删除顶层文件可能会比定位有问题的目录更幸运:

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

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

答案3

(我相信这会起作用,而且因为我现在要去旅行,所以我会把这个保留为答案,如果它不起作用,我可以在将来删除它。)

  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
    

相关内容