“Find:.: Tidak ada file atau direktori” saat menggunakan find di direktori saat ini

9

Perintah find sepertinya tidak bekerja sama sekali. Sebagai contoh, saya berada di direktori di mana benar-benar ada file bernama index.php dan saya menjalankan ini:

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

Saya selalu mendapatkan ini tidak ada kesalahan file atau direktori tersebut.

Tidak peduli jalur apa yang saya tetapkan, atau file apa yang saya cari, saya selalu mendapatkan kesalahan ini. Saya cukup yakin bahwa saya menghadap sesuatu yang sangat sederhana. Bisakah seseorang menunjukkan kesalahan saya?

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

[root@server htdocs]# find . -noleaf -name "index.php"
find: .: No such file or directory
andris
sumber
Apa yang ls -la|grep "index.php"dikatakan?
user80551
find .tidak bekerja juga? Bagaimana dengan ls -al?
Braiam
1
Fakta yang find .menemukan .entri, kemudian mengeluh bahwa itu tidak ada adalah penasaran. Tampaknya ini adalah bug dengan find, versi apa yang Anda gunakan?
Graeme
2
Bisakah Anda memposting output di strace find .suatu tempat?
Stéphane Chazelas
1
@ mikeserv itu ext3, tetapi saya telah mengaktifkan ACL di atasnya tanpa benar-benar tahu apa yang saya lakukan :), jadi mungkin itu alasannya. Akan mencoba untuk menonaktifkannya dan melihat apa yang terjadi
andris

Jawaban:

2

Menurut stracehasil Anda , dan saya tidak tahu tentang alasannya, open()fungsi awalan nama file dengan /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
sumber
0

Anda mungkin tidak memiliki izin eksekusi untuk pengguna Anda dari direktori yang Anda cari. Apakah sudah membaca dan menjalankan izin?

vadimbog
sumber
0

Cobalah dengan jalur absolut seperti:

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

Dan seperti yang telah disebutkan di atas, mungkin Anda tidak memiliki izin. Apa yang terjadi jika Anda:

ls . 

Apakah shell Anda tahu apa yang harus dilakukan dengan titik?

AME
sumber
0

Kamu bisa menggunakan

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

Cara terbaik untuk mencari file atau folder adalah:

  • updatedb (untuk memperbarui indeks file sistem).

  • locate Myfile

Rahul V Sharma
sumber
Perhatikan bahwa menggunakan updatedbdan locatemengharuskan paket yang menyediakan keduanya diinstal (misalnya, mlocate).
HalosGhost
0

Saya menggunakan Red Hat Enterprise Linux Server rilis 6.4 (Santiago). Anda dapat memastikan Anda menggunakan find yang tepat /usr/binatau /binuntuk memastikan perintah find ada di sana. Jika Anda bahkan tidak dapat melakukan manpada find, cobalah mengubah shell Anda baik /bin/kshatau /bin/bash. Saya telah menemukan bahwa variabel lingkungan dan jalur dapat membingungkan sesekali.

pengguna83872
sumber
0

Seperti yang disebutkan orang lain, menggunakan path lengkap ke binary find dapat membantu. Mungkin ditemukan alias dengan flag tambahan di sistem Anda. Mengetik \findakan mencegah alias digunakan. Anda juga dapat menggunakan aliasuntuk melihat alias perintah di sesi shell Anda saat ini.

Robble
sumber
0

Saya melihat ini terjadi pada Mac ketika direktori berada pada media yang dapat dilepas yang telah dihapus dan dibaca sejak jendela terminal dibuka. Saya tidak bisa menjelaskan mengapa (mungkin ada hubungannya dengan informasi yang di-cache ketika sesi terminal dimulai), tetapi itu dapat direproduksi. Baru saja memulai kembali sesi terminal dan semuanya baik-baik saja.

pengguna3781694
sumber