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 strace
saí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?