在当前目录上使用 find 时出现“find: .: No such file or directory”

在当前目录上使用 find 时出现“find: .: No such file or directory”

查找命令似乎根本不起作用。例如,我所在的目录中绝对存在名为 index.php 的文件,并且我执行以下命令:

[root@server htdocs]# find . -name "index.php"
find: .: No such file or directory

我总是收到“没有这样的文件或目录”错误。

无论我定义什么路径,或者搜索什么文件,我总是会收到此错误。我很确定我忽略了一些非常简单的事情。有人可以指出我做错了什么吗?

[root@server htdocs]# pwd
/srv/www/htdocs
[root@server htdocs]# type -a find
find is /usr/bin/find
[root@server htdocs]# ls -la | grep index.php
-rw-rw-r--  1 andris users  413 Sep  1  2013 index.php
[root@server htdocs]# find . -name "index.php"
find: .: No such file or directory
[root@server htdocs]# find .
.
find: .: No such file or directory

[root@server htdocs]# stat .
  File: `.'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: ca00h/51712d    Inode: 155686      Links: 12
Access: (0775/drwxrwxr-x)  Uid: (  504/  andris)   Gid: (  100/   users)
Access: 2014-06-17 19:37:22.000000000 +0000
Modify: 2014-06-08 21:06:16.000000000 +0000
Change: 2014-06-08 21:06:16.000000000 +0000

[root@server htdocs]# find --version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX

strace find .输出:https://gist.github.com/andrisp/f3adaf740548eead33da

[root@server htdocs]# find . -noleaf -name "index.php"
find: .: No such file or directory

答案1

根据您的strace输出,我不知道原因,该open()函数的文件名前缀为/proc/

open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(4, /* 21 entries */, 32768) = 664
getgid32() = 0
stat64("/proc/index.php", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/.svn", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/init-dist.php", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/landing-page.html", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
[...]
stat64("/proc/js", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/extras", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/sitemaps", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getdents64(4, /* 0 entries */, 32768) = 0

答案2

我在 Mac 上看到过这种情况,当目录位于可移动媒体上时,自终端窗口打开以来,该媒体已被删除和读取。我无法解释原因(可能与终端会话启动时缓存的信息有关),但它是可重现的。刚刚重新启动终端会话,一切都很好。

答案3

尝试使用绝对路径,例如:

   sudo find /where/your_file_is/located/ -iname "index.php"

正如上面已经提到的,您可能没有权限。如果您出现以下情况,会发生什么情况:

ls . 

你的 shell 知道如何处理这个点吗?

答案4

您的用户可能没有对您正在搜索的目录的执行权限。是否具有读取和执行权限?

相关内容