我刚刚运行了一些自己编写的程序,在其中创建文件并填充内容。但是,我在名称生成方面做了一些错误(或者至少没有按预期执行),现在文件夹中有四个文件,无法删除,因为它们“不存在”。
命令的输出:
ls -li
:
ls: cannot access één: No such file or directory
ls: cannot access wetenschapÂpen.: No such file or directory
ls: cannot access verantwoorÂdelijk: No such file or directory
ls: cannot access woord wordt: No such file or directory
total 0
? -????????? ? ? ? ? ? één
? -????????? ? ? ? ? ? woord wordt
? -????????? ? ? ? ? ? verantwoorÂdelijk
? -????????? ? ? ? ? ? wetenschapÂpen.
rm -i -- *
:
rm: remove regular file `één'? y
rm: cannot remove `één': No such file or directory
rm: remove regular file `woord wordt'? y
rm: cannot remove `woord wordt': No such file or directory
rm: remove regular file `verantwoorÂdelijk'? y
rm: cannot remove `verantwoorÂdelijk': No such file or directory
rm: remove regular file `wetenschapÂpen.'? y
rm: cannot remove `wetenschapÂpen.': No such file or directory
rm -rf folder
:(“文件夹”是文件所在的文件夹)
rm: cannot remove `folder': Directory not empty
find . -type f -delete
:(来自 Uditha Desilva 的回答)
find: cannot delete `./één': No such file or directory
find: cannot delete `./wetenschapÂpen.': No such file or directory
find: cannot delete `./verantwoorÂdelijk': No such file or directory
find: cannot delete `./woord wordt': No such file or directory
strace -o out rm -f -- *
:出的内容
我怎样才能删除这些文件?
需要注意的是,我没有 root 访问权限,因此我更喜欢不需要 root 访问权限的选项。
答案1
只需从 UI 中删除文件作为“移至垃圾箱”即可。然后转到垃圾箱并从那里删除。此过程将从您的 Linux 系统中永久删除您的文件。
答案2
此行为是由于目录中缺少执行权限,用户无法执行操作,stat()
但可以读取目录条目。
为了避免这种情况,您可以chmod 700
对主目录进行操作。
要再次重现此行为,您可以在任何目录上执行chmod 600
或chmod 400
,它将出现相同的问题。
$ chmod 400 folder
$ ls - ltr folder
-????????? ? ? ? ? ? omd
-????????? ? ? ? ? ? file5
-????????? ? ? ? ? ? file4
-????????? ? ? ? ? ? file3.txt
-????????? ? ? ? ? ? file2.txt
$ chmod 700 folder
$ ls - ltr folder
-rw-rw-r-- 1 tachomi tachomi 2 Mar 2 08:53 file4
-rw-rw-r-- 1 tachomi tachomi 2 Mar 2 08:53 file5
-rw-rw-r-- 1 tachomi tachomi 0 Mar 2 08:53 omd
-rw-rw-r-- 1 tachomi tachomi 2 Mar 2 09:01 file1.txt
-rw-rw-r-- 1 tachomi tachomi 2 Mar 2 09:01 file2.txt
试一下
答案3
这几乎就像您成功地将垃圾写入目录 inode 本身而不是写入其中的文件一样。不过,尝试一下
find . -type f -delete
它不会尝试对文件进行 shell 扩展,因此可能会成功。
编辑: tachomi 的答案似乎是最有可能的解释,但不可能“cd”到 400 模式的目录中,或者在进入其中后列出其内容,因此也不完全适合:
$ chmod 400 test
$ ls -li test
ls: cannot access test/Pictures: Permission denied
ls: cannot access test/Music: Permission denied
ls: cannot access test/Shows: Permission denied
ls: cannot access test/TV: Permission denied
ls: cannot access test/Movies: Permission denied
total 0
? -????????? ? ? ? ? ? Movies
? -????????? ? ? ? ? ? Music
? -????????? ? ? ? ? ? Pictures
? -????????? ? ? ? ? ? Shows
? -????????? ? ? ? ? ? TV
$ cd test
bash: cd: test: Permission denied
$ chmod 700 test
$ cd test
$ ls -li
total 0
267447 -rw-r--r-- 1 abcd abcd 0 Mar 3 19:45 Movies
267448 -rw-r--r-- 1 abcd abcd 0 Mar 3 19:45 Music
267449 -rw-r--r-- 1 abcd abcd 0 Mar 3 19:45 Pictures
267451 -rw-r--r-- 1 abcd abcd 0 Mar 3 19:45 Shows
267450 -rw-r--r-- 1 abcd abcd 0 Mar 3 19:45 TV
但是,如果 GUI 删除过程在删除之前“在幕后”更改了目录权限,则删除可能会起作用。