Tìm kiếm:.: Không có tập tin hoặc thư mục như vậy trong khi sử dụng find trên thư mục hiện tại


9

Tìm lệnh dường như không hoạt động gì cả. Ví dụ: tôi đang ở trong một thư mục chứa tệp có tên index.php và tôi thực hiện điều này:

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

Tôi luôn luôn nhận được điều này không có lỗi tập tin hoặc thư mục như vậy.

Bất kể tôi xác định đường dẫn nào, hoặc tệp nào tôi tìm kiếm, tôi luôn gặp lỗi này. Tôi khá chắc chắn rằng tôi đang xem một cái gì đó rất đơn giản. Ai đó có thể chỉ ra những gì tôi đang làm sai?

[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 .đầu ra: https://gist.github.com/andrisp/f3adaf740548eead33da

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

ls -la|grep "index.php"nói gì
dùng80551

find .cũng không làm việc? Thế còn ls -al?
Braiam

1
Thực tế find .tìm thấy .mục, sau đó phàn nàn rằng nó không tồn tại là tò mò. Dường như đây là một lỗi với find, bạn đang sử dụng phiên bản nào?
Graeme

2
Bạn có thể gửi đầu ra của strace find .một nơi nào đó?
Stéphane Chazelas

1
@mikeerv là ext3, nhưng tôi đã kích hoạt ACL trên nó mà không thực sự biết tôi đang làm gì :), vì vậy đây có lẽ là lý do. Sẽ cố gắng vô hiệu hóa nó và xem điều gì sẽ xảy ra
andris

Câu trả lời:


2

Theo kết stracequả đầu ra của bạn và tôi không biết lý do, open()tên tập tin tiền tố của hàm với /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

Bạn có thể không có quyền thực thi cho người dùng của mình cho thư mục bạn đang tìm kiếm. Liệu nó đã đọc và thực thi sự cho phép?


0

Hãy thử nó với đường dẫn tuyệt đối như:

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

Và như đã đề cập ở trên, có thể là bạn không có quyền. Điều gì xảy ra nếu bạn:

ls . 

Vỏ của bạn có biết phải làm gì với dấu chấm không?


0

Bạn có thể dùng

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

Cách tốt nhất để tìm kiếm tập tin hoặc thư mục là:

  • updatedb (để cập nhật chỉ mục tập tin hệ thống).

  • locate Myfile


Lưu ý rằng việc sử dụng updatedblocateyêu cầu một gói cung cấp cả hai để được cài đặt (ví dụ mlocate:).
HalosGhost

0

Tôi đang sử dụng Red Hat Enterprise Linux Server phát hành 6.4 (Santiago). Bạn có thể chắc chắn rằng bạn đang sử dụng quyền tìm hoặc /usr/binhoặc /binđể đảm bảo lệnh find ở đó. Nếu bạn thậm chí không thể thực hiện mantrên find, hãy thử thay đổi shell của bạn cho một trong hai /bin/kshhoặc /bin/bash. Tôi đã thấy rằng các biến và đường dẫn môi trường có thể bị lẫn lộn một lần trong một lúc.


0

Như những người khác đã đề cập, sử dụng đường dẫn đầy đủ để tìm nhị phân có thể giúp ích. Có thể tìm thấy được đặt bí danh với các cờ bổ sung trên hệ thống của bạn. Gõ \findsẽ ngăn chặn bất kỳ bí danh nào được sử dụng là tốt. Bạn cũng có thể sử dụng aliasđể xem các bí danh lệnh trong phiên shell hiện tại của mình.


0

Tôi đã thấy điều này xảy ra trên Mac khi thư mục nằm trên phương tiện lưu động đã bị xóa và được gắn lại kể từ khi cửa sổ đầu cuối được mở. Tôi không thể giải thích tại sao (có lẽ phải làm với thông tin được lưu trong bộ nhớ cache khi phiên cuối được bắt đầu), nhưng nó có thể được lặp lại. Chỉ cần khởi động lại phiên cuối và tất cả đều ổn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.