"Find:.: Keine solche Datei oder kein solches Verzeichnis" bei Verwendung von find im aktuellen Verzeichnis

9

Der Befehl Suchen scheint überhaupt nicht zu funktionieren. Zum Beispiel bin ich in einem Verzeichnis, in dem es absolut die Datei index.php gibt, und führe Folgendes aus:

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

Ich bekomme immer keinen solchen Datei- oder Verzeichnisfehler.

Egal welchen Pfad ich definiere oder nach welcher Datei ich suche, ich erhalte immer diesen Fehler. Ich bin mir ziemlich sicher, dass ich etwas sehr Einfaches übersehen habe. Kann jemand darauf hinweisen, was ich falsch mache?

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

[root@server htdocs]# find . -noleaf -name "index.php"
find: .: No such file or directory
andris
quelle
Was ls -la|grep "index.php"sagt das aus?
user80551
find .funktioniert auch nicht? Was ist mit ls -al?
Braiam
1
Die Tatsache, dass find .der .Eintrag gefunden wird und sich dann beschwert, dass er nicht existiert, ist merkwürdig. Anscheinend ist dies ein Fehler mit findwelcher Version verwenden Sie?
Graeme
2
Können Sie die Ausgabe von strace find .irgendwo posten ?
Stéphane Chazelas
1
@mikeserv es ist ext3, aber ich habe ACL darauf aktiviert, ohne wirklich zu wissen, was ich tue :), also ist es wahrscheinlich der Grund.
Ich

Antworten:

2

Entsprechend Ihrer straceAusgabe und ich habe keine Ahnung über den Grund, die open()Funktion Präfix Dateinamen mit /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
quelle
0

Möglicherweise haben Sie für Ihren Benutzer keine Ausführungsberechtigung für das Verzeichnis, aus dem Sie suchen. Hat es Lese- und Ausführungsberechtigung?

Vadimbog
quelle
0

Versuchen Sie es mit dem absoluten Pfad wie:

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

Und wie oben bereits erwähnt, kann es sein, dass Sie keine Berechtigungen haben. Was passiert, wenn Sie:

ls . 

Weiß Ihre Shell, was mit dem Punkt zu tun ist?

EIN ICH
quelle
0

Sie können verwenden

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

Der beste Weg, um nach Dateien oder Ordnern zu suchen, ist:

  • updatedb (zum Aktualisieren des Systemdatei-Index).

  • locate Myfile

Rahul V Sharma
quelle
Beachten Sie, dass Sie ein Paket verwenden updatedbund locatebenötigen, das beides bereitstellt, um installiert zu werden (z mlocate. B. ).
HalosGhost
0

Ich verwende Red Hat Enterprise Linux Server Version 6.4 (Santiago). Sie können sicherstellen, dass Sie entweder die richtige Suche verwenden /usr/binoder /bindass der Befehl find vorhanden ist. Wenn Sie nicht einmal ein tun können , manauf find, versuchen Sie Ihre Shell zu ändern , um entweder /bin/kshoder /bin/bash. Ich habe festgestellt, dass Umgebungsvariablen und Pfade von Zeit zu Zeit verwirrt werden können.

user83872
quelle
0

Wie bereits erwähnt, kann es hilfreich sein, den vollständigen Pfad zur Find-Binärdatei zu verwenden. Es ist möglich, dass find mit zusätzlichen Flags auf Ihrem System versehen ist. Durch die Eingabe \findwird verhindert, dass auch Aliase verwendet werden. Sie können auch aliasBefehlsaliasnamen in Ihrer aktuellen Shell-Sitzung anzeigen.

rauben
quelle
0

Ich habe gesehen, dass dies auf einem Mac passiert, wenn sich das Verzeichnis auf einem Wechselmedium befindet, das seit dem Öffnen des Terminalfensters entfernt und erneut gelesen wurde. Ich kann nicht erklären, warum (hat wahrscheinlich mit Informationen zu tun, die beim Start der Terminalsitzung zwischengespeichert wurden), aber sie waren reproduzierbar. Ich habe gerade die Terminalsitzung neu gestartet und alles war in Ordnung.

user3781694
quelle