“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

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

0

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


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?


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


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.


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.