无法删除: 没有这样的文件或目录

无法删除: 没有这样的文件或目录

我刚刚运行了一些自己编写的程序,在其中创建文件并填充内容。但是,我在名称生成方面做了一些错误(或者至少没有按预期执行),现在文件夹中有四个文件,无法删除,因为它们“不存在”。

命令的输出:

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 600chmod 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 删除过程在删除之前“在幕后”更改了目录权限,则删除可能会起作用。

相关内容