在当前目录上使用find时,“查找:。:没有此类文件或目录”


9

查找命令似乎根本不起作用。例如,我在一个绝对存在名为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

什么ls -la|grep "index.php"发言权?
user80551 2014年

find .也不行吗?那ls -al
Braiam 2014年

1
find .找到.条目,然后抱怨它不存在的事实很好奇。看来这是的错误find,您使用的是哪个版本?
Graeme 2014年

2
您可以将输出发布到strace find .某个地方吗?
斯特凡Chazelas

1
@mikeserv它是ext3,但是我在不真正知道我在做什么的情况下启用了ACL :),所以这可能是原因。将尝试禁用它,看看会发生什么
andris

Answers:


2

根据您的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

0

您的用户可能没有从中搜索目录的执行权限。它具有读取和执行权限吗?


0

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

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

如上所述,可能是您没有权限。如果您发生以下情况,会发生什么:

ls . 

您的外壳程序知道如何处理该点吗?


0

您可以使用

$ find ~/ -type f -name "MYFILE"

搜索文件或文件夹的最佳方法是:

  • updatedb (用于更新系统文件索引)。

  • locate Myfile


请注意,使用updatedblocate要求安装提供两者的软件包(例如mlocate)。
HalosGhost

0

我正在使用Red Hat Enterprise Linux Server 6.4版(圣地亚哥)。您可以确保使用正确的查找,/usr/bin或者/bin确保找到了find命令。如果你甚至不能做manfind,试着改变你的shell要么/bin/ksh/bin/bash。我发现环境变量和路径有时可能会混淆。


0

正如其他人提到的那样,使用完整路径查找二进制文件可能会有所帮助。可能在系统上为别名加上其他标志。键入\find也将防止使用任何别名。您还可以alias用来在当前的Shell会话中查看命令别名。


0

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

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.