“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

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

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?


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?


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


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.