"Find:.: Aucun fichier ou répertoire de ce type" lors de l'utilisation de find sur le répertoire courant


9

La commande Find semble ne pas fonctionner du tout. Par exemple, je suis dans un répertoire où il y a absolument un fichier nommé index.php et j'exécute ceci:

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

Je reçois toujours cette erreur de fichier ou de répertoire.

Peu importe le chemin que je définis ou le fichier que je recherche, j'obtiens toujours cette erreur. Je suis sûr que j'oublie quelque chose de très simple. Quelqu'un peut-il signaler ce que je fais mal?

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

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

Que ls -la|grep "index.php"dit-on?
user80551

find .ne fonctionne pas non plus? Et alors ls -al?
Braiam

1
Le fait que find .trouve l' .entrée, puis se plaint qu'elle n'existe pas est curieux. Apparemment, c'est un bug avec findquelle version utilisez-vous?
Graeme

2
Pouvez-vous publier la sortie de strace find .quelque part?
Stéphane Chazelas

1
@mikeserv c'est ext3, mais j'ai activé ACL dessus sans vraiment savoir ce que je fais :), c'est donc probablement la raison. J'essaierai de le désactiver et de voir ce qui se passe
andris

Réponses:


2

Selon votre stracesortie, et je n'ai aucune idée de la raison, les open()noms de fichiers de préfixe de fonction avec /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

Vous ne disposez peut-être pas de l'autorisation d'exécution pour votre utilisateur pour le répertoire que vous recherchez. A-t-il une autorisation de lecture et d'exécution?


0

Essayez-le avec le chemin absolu comme:

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

Et comme déjà mentionné ci-dessus, il se peut que vous ne disposiez pas d'autorisations. Que se passe-t-il si vous:

ls . 

Votre coque sait-elle quoi faire avec le point?


0

Vous pouvez utiliser

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

La meilleure façon de rechercher un fichier ou un dossier est:

  • updatedb (pour mettre à jour l'index des fichiers système).

  • locate Myfile


Notez que l'utilisation updatedbet locatenécessite qu'un package qui fournit les deux à installer (par exemple, mlocate).
HalosGhost

0

J'utilise la version 6.4 de Red Hat Enterprise Linux Server (Santiago). Vous pouvez vous assurer que vous utilisez le trouver droit soit /usr/binou /binpour vous assurer que la commande find est là. Si vous ne pouvez même pas faire un manon find, essayez de changer votre shell en /bin/kshou /bin/bash. J'ai trouvé que les variables d'environnement et les chemins peuvent se confondre de temps en temps.


0

Comme d'autres l'ont mentionné, l'utilisation du chemin complet du binaire de recherche peut être utile. Il est possible que la recherche soit aliasée avec des indicateurs supplémentaires sur votre système. La saisie \findempêchera également l'utilisation d'alias. Vous pouvez également utiliser aliaspour afficher les alias de commande dans votre session shell actuelle.


0

J'ai vu cela se produire sur Mac lorsque le répertoire est sur un support amovible qui a été supprimé et ré-ajouté depuis l'ouverture de la fenêtre du terminal. Je ne peux pas expliquer pourquoi (cela a probablement à voir avec les informations mises en cache au démarrage de la session de terminal), mais c'était reproductible. Je viens de redémarrer la session de terminal et tout allait bien.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.