"find: .: Nenhum arquivo ou diretório" ao usar find no diretório atual

"find: .: Nenhum arquivo ou diretório" ao usar find no diretório atual

O comando Find parece não funcionar. Por exemplo, estou em um diretório onde existe um arquivo chamado index.php e executo isto:

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

Eu sempre recebo esse erro de nenhum arquivo ou diretório.

Não importa o caminho que eu defina ou o arquivo que procuro, sempre recebo esse erro. Tenho certeza de que estou negligenciando algo muito simples. Alguém pode apontar o que estou fazendo de errado?

[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 .saída:https://gist.github.com/andrisp/f3adaf740548eead33da

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

Responder1

De acordo com sua stracesaída, e não tenho ideia do motivo, a open()função prefixa nomes de arquivos com /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

Responder2

Já vi isso acontecer no Mac quando o diretório está em uma mídia removível que foi removida e lida desde que a janela do terminal foi aberta. Não consigo explicar o porquê (provavelmente tem a ver com informações armazenadas em cache quando a sessão do terminal foi iniciada), mas foi reproduzível. Acabei de reiniciar a sessão do terminal e tudo correu bem.

Responder3

Experimente com o caminho absoluto como:

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

E como já mencionado acima, pode ser que você não tenha permissões. O que acontece se você:

ls . 

Seu shell sabe o que fazer com o ponto?

Responder4

Talvez você não tenha permissão de execução para seu usuário no diretório em que está pesquisando. Possui permissão de leitura e execução?

informação relacionada