«Find:.: Нет такого файла или каталога» при использовании find в текущем каталоге

9

Команда 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
Andris
источник
Что ls -la|grep "index.php"говорит?
user80551
find .тоже не работает? Как насчет ls -al?
Брайам
1
Тот факт, что find .находит .запись, а затем жалуется, что она не существует, любопытно. Похоже, это ошибка, с findкакой версией вы пользуетесь?
Грэм,
2
Можете ли вы опубликовать вывод strace find .где-то?
Стефан Шазелас
1
@mikeserv это ext3, но я включил ACL на нем, не зная, что я делаю :), так что это, вероятно, причина.
Постараюсь

Ответы:

2

Согласно вашему 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
Себастьен
источник
0

Возможно, у вас нет прав на выполнение для каталога, из которого вы ищете. Имеет ли он разрешение на чтение и выполнение?

vadimbog
источник
0

Попробуйте это с абсолютным путем, как:

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

И, как уже упоминалось выше, возможно, у вас нет прав. Что произойдет, если вы:

ls . 

Ваша оболочка знает, что делать с точкой?

AME
источник
0

Ты можешь использовать

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

Лучший способ поиска файла или папки:

  • updatedb (для обновления индекса файлов системы).

  • locate Myfile

Рахул V Шарма
источник
Обратите внимание, что использование updatedbи locateтребуют, чтобы пакет, который обеспечивает оба, чтобы быть установлен (например, mlocate).
HalosGhost
0

Я использую Red Hat Enterprise Linux Server версии 6.4 (Сантьяго). Вы можете убедиться , что вы используете правильную находку либо /usr/binили , /binчтобы убедиться , что команда находки есть. Если вы не можете даже сделать manна find, попробуйте изменить свою оболочку либо /bin/kshили /bin/bash. Я обнаружил, что переменные окружения и пути могут путаться время от времени.

user83872
источник
0

Как уже упоминалось, может помочь использование полного пути к двоичному файлу поиска. Возможно, в вашей системе есть дополнительные флаги. Печатание \findтакже предотвратит использование любых псевдонимов. Вы также можете использовать aliasдля просмотра псевдонимов команд в текущем сеансе оболочки.

robble
источник
0

Я видел, как это происходит на Mac, когда каталог находится на съемном носителе, который был удален и прочитан с момента открытия окна терминала. Я не могу объяснить, почему (вероятно, это связано с информацией, кэшированной при запуске терминальной сессии), но это было воспроизводимо. Просто перезапустил терминальную сессию и все было хорошо.

user3781694
источник