“Find:.: Esse arquivo ou diretório não existe” ao usar o find no diretório atual

9

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

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

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

Independentemente do caminho que eu defino ou do arquivo que procuro, sempre recebo esse erro. Tenho certeza de que estou ignorando 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
andris
fonte
O que ls -la|grep "index.php"diz?
user80551
find .também não funciona? Que tal ls -al?
Braiam
1
O fato de find .encontrar a .entrada e reclamar que ela não existe é curioso. Aparentemente, este é um erro com findqual versão você está usando?
Graeme
2
Você pode postar a saída de strace find .algum lugar?
Stéphane Chazelas
1
@mikeserv é ext3, mas habilitei o ACL sem realmente saber o que estou fazendo :), por isso é provavelmente o motivo. Vai tentar desabilitá-lo e ver o que acontece
andris

Respostas:

2

De acordo com a sua stracesaída, e não tenho idéia do motivo, o open()prefixo da função nomeia os 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
Sébastien
fonte
0

Você pode não ter permissão de execução para o usuário no diretório em que está pesquisando. Possui permissão de leitura e execução?

vadimbog
fonte
0

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?

AME
fonte
0

Você pode usar

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

A melhor maneira de procurar arquivo ou pasta é:

  • updatedb (para atualizar o índice do arquivo do sistema).

  • locate Myfile

Rahul V Sharma
fonte
Observe que, usando updatedbe locateexigindo que um pacote que forneça ambos seja instalado (por exemplo, mlocate).
HalosGhost
0

Estou usando o Red Hat Enterprise Linux Server versão 6.4 (Santiago). Você pode ter certeza de que está usando a localização correta /usr/binou /binpara garantir que o comando find esteja lá. Se você não pode mesmo fazer um manon find, tente alterar o seu shell a qualquer /bin/kshou /bin/bash. Descobri que as variáveis ​​e os caminhos do ambiente podem ficar confusos de vez em quando.

user83872
fonte
0

Como outros já mencionaram, usar o caminho completo para encontrar o binário pode ajudar. É possível encontrar um alias com sinalizadores adicionais no seu sistema. A digitação \findevitará que aliases sejam usados ​​também. Você também pode usar aliaspara exibir aliases de comando na sua sessão atual do shell.

roubar
fonte
0

Eu vi isso acontecer no Mac quando o diretório está na mídia removível que foi removida e lida desde que a janela do terminal foi aberta. Não sei explicar por que (provavelmente tem a ver com informações armazenadas em cache quando a sessão do terminal foi iniciada), mas era reproduzível. Apenas reiniciei a sessão do terminal e tudo estava bem.

user3781694
fonte