间接删除目录本身


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办?
21:08的terdon

另请加上ls -dli devicesandls -dli devices/reg-dummy/subsystem/devices/
terdon

3
第一个命令应该是ls -ldi devices,不是device。我正在尝试查看这些是否实际上是硬链接(相同的inode)。但是,请注意,如果这是一个大目录,rm -rf将花费很长时间,但最终会起作用。如果这里的问题是循环链接,您将收到有关无限递归的错误消息。如果没有错误消息,请让其rm -rf运行。
terdon 2014年

7
@terdon:我以为Linux(至少是Ubuntu)不允许硬链接目录?
saiarcot895 2014年

2
我只是假设您尝试使用Nautilus内置的“空垃圾箱”按钮?(也许他们在写鹦鹉螺时想到了这样的事情^^)
MrVaykadji 2014年

Answers:


3

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


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下无法对目录进行硬链接。通常,当您进行无限递归时(如软链接可能发生的那样),您会收到一条消息,表明这种情况似乎没有发生。

我可以想到的另一种可能性是,“垃圾箱”文件夹本身就是一些奇怪的系统。我真的不知道它是如何工作的,我从不使用它。但是,您最好还是直接删除顶层文件,而不是直接定位有问题的目录:

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

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


他们都失败了。问题修改。
PyRulez 2014年

@PyRulez这个目录有多大?perl脚本和rm都不会产生任何输出。他们跑了多久?我也更新了find命令,前一个命令是错误的,抱歉。看看更新后的答案。最后,我们在这里盲目工作。请使用您使用过的ls -l地方的输出来更新您的问题ls,并显示的结果,du -sch ~/.local/share/Trash/以便我们知道大小。
terdon 2014年

我找不到尺寸。
PyRulez 2014年

@PyRulez尝试du -sch ~/.local/share/Trash/将为您提供尺寸。并请添加各种评论所要求的所有内容,它们是必需的,以便我们了解发生了什么。
terdon 2014年

@tedron我去过。
PyRulez 2014年

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
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.