“Trova:.: Nessun file o directory di questo tipo” durante l'utilizzo di trova nella directory corrente


9

Il comando Trova sembra non funzionare affatto. Ad esempio, mi trovo in una directory in cui esiste assolutamente un file chiamato index.php e lo eseguo:

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

Ottengo sempre questo errore di file o directory.

Indipendentemente dal percorso che definisco o dal file che cerco, ottengo sempre questo errore. Sono abbastanza sicuro di trascurare qualcosa di molto semplice. Qualcuno può sottolineare cosa sto facendo di sbagliato?

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

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

Cosa ls -la|grep "index.php"dice?
user80551

find .non funziona neanche? Che dire ls -al?
Braiam,

1
Il fatto che find .trovi la .voce, poi si lamenta che non esiste è curioso. Apparentemente si tratta di un bug con findquale versione stai usando?
Graeme,

2
Puoi pubblicare l'output di strace find .qualche luogo?
Stéphane Chazelas,

1
@mikeserv è ext3, ma ho abilitato ACL su di esso senza sapere davvero cosa sto facendo :), quindi probabilmente è la ragione. Cercherà di disabilitarlo e vedere cosa succede
Andris,

Risposte:


2

Secondo il tuo straceoutput, e non ho idea del motivo, il open()prefisso della funzione ha nomi di file con /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

Potresti non avere i permessi di esecuzione per il tuo utente per la directory da cui stai cercando. Ha permesso di leggere ed eseguire?


0

Provalo con il percorso assoluto come:

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

E come già accennato in precedenza, è possibile che tu non disponga delle autorizzazioni. Cosa succede se:

ls . 

La tua shell sa cosa fare con il punto?


0

Puoi usare

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

Il modo migliore per cercare file o cartelle è:

  • updatedb (per l'aggiornamento dell'indice dei file di sistema).

  • locate Myfile


Si noti che l'utilizzo updatedbe la locaterichiesta di un pacchetto che prevede l'installazione di entrambi (ad es mlocate.).
HalosGhost

0

Sto usando Red Hat Enterprise Linux Server versione 6.4 (Santiago). Puoi assicurarti di utilizzare la ricerca giusta /usr/bino /binper accertarti che il comando find sia presente. Se non riesci nemmeno a fare un manon find, prova a cambiare la shell in uno /bin/ksho /bin/bash. Ho scoperto che le variabili e i percorsi di ambiente possono essere confusi una volta ogni tanto.


0

Come altri hanno già detto, può essere utile utilizzare l'intero percorso per trovare il binario. È possibile trovare alias con flag aggiuntivi sul tuo sistema. La digitazione \findimpedirà di utilizzare anche tutti gli alias. È inoltre possibile utilizzare aliasper visualizzare gli alias dei comandi nella sessione di shell corrente.


0

Ho visto che questo accade su Mac quando la directory è su un supporto rimovibile che è stata rimossa e ritoccata dall'apertura della finestra del terminale. Non riesco a spiegare perché (probabilmente ha a che fare con le informazioni memorizzate nella cache all'avvio della sessione terminale), ma era riproducibile. Ho appena riavviato la sessione del terminale e tutto è andato bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.