現在のディレクトリで find を使用しているときに「find: .: そのようなファイルまたはディレクトリはありません」というエラーが表示される

現在のディレクトリで find を使用しているときに「find: .: そのようなファイルまたはディレクトリはありません」というエラーが表示される

検索コマンドはまったく機能しないようです。たとえば、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 . 

あなたのシェルはドットをどう処理するか知っていますか?

答え4

検索元のディレクトリに対して、ユーザーに実行権限がない可能性があります。読み取りおよび実行権限はありますか?

関連情報