看起来我有一个文件夹,其中包含一个文件名为空的文件夹。
$ ls -alF Antonin_Dvorak/
total 12
drwx------ 3 VUW\me VUW\domain users 4096 Jan 22 2015 /
drwx------ 3 VUW\me VUW\domain users 4096 Jan 22 2015 ./
drwx------ 3 VUW\me VUW\domain users 4096 Aug 25 11:10 ../
它在 python 中确实显示为空。
$ python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.listdir()
['']
>>> len(os.listdir('Antonin_Dvorak')[0])
0
当我切换到目录并运行时ls
,出现错误
$ cd Antonin_Dvorak
$ ls
ls: cannot access '': No such file or directory
$ ls -alF
ls: cannot access '': No such file or directory
total 8
d????????? ? ? ? ? ? /
drwx------ 3 VUW\kaipingga VUW\domain users 4096 Jan 22 2015 ./
drwx------ 3 VUW\kaipingga VUW\domain users 4096 Aug 25 11:10 ../
我假设在某个时候,文件名可能是包含西里尔字符的专辑/音乐标题,但同时将文件夹移动到不同的文件系统,将其移动到垃圾箱,并且发生了发行版升级。包含该文件夹的文件系统是
$ mount | grep grep $(pwd | head -c 9)
/etc/auto.master.d/issc_nfs_homedir.conf on /vol/home type autofs (rw,relatime,fd=6,pgrp=1310,timeout=300,minproto=5,maxproto=5,direct)
vuwunix01:/vol/vfiler_vuwunix01_data01/users on /vol/home type nfs4 (rw,nosuid,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=krb5,clientaddr=132.229.239.78,local_lock=none,addr=132.229.18.60)
我不想恢复内容,我只想删除整个 Antonin_Dvorak 文件夹。
$ cd ..; rm -rf Antonin_Dvorak/
rm: cannot remove 'Antonin_Dvorak/': Directory not empty
我目前没有这台机器的 root 访问权限,并且请注意,这台机器位于网络共享上。我该怎么办?
等等,什么?我会将其编辑到问题正文中,但是:
$ ls -ial Antonin_Dvorak/
total 12
24005685 drwx------ 3 VUW\kaipingga VUW\domain users 4096 Jan 22 2015
24005685 drwx------ 3 VUW\kaipingga VUW\domain users 4096 Jan 22 2015 .
47956345 drwx------ 3 VUW\kaipingga VUW\domain users 4096 Aug 25 11:10 ..
$ #So, no surprise here:
$ find . -maxdepth 1 -type d -inum 24005685 -delete
find: cannot delete ‘./Antonin_Dvorak’: Directory not empty
它不仅仅是一个无名的随机文件夹。这是文件夹本身的无名硬链接?
答案1
您可以通过 inode 删除文件夹。
首先,用 查找 inode 号ls -ial Antonin_Dvorak/
。
示例输出:
$ ls -ial Antonin_Dvorak/
total 12
25306387 drwx------ 3 VUW\me VUW\domain users 4096 Jan 22 2015 /
23592962 drwx------ 3 VUW\me VUW\domain users 4096 Jan 22 2015 ./
23592391 drwx------ 3 VUW\me VUW\domain users 4096 Aug 25 11:10 ../
您不能直接将 inode 传递给 rm,但 find 有一个技巧。
find . -maxdepth 1 -type d -inum 25306387 -delete
请确保将我的示例 inode (25306387) 替换为您系统上的 inode!
答案2
尝试使用取消链接。由于它是硬链接,因此您需要取消链接,然后 rm -r 才能工作。