Duyệt thư mục hiện tại và tìm các tệp bắt đầu bằng lib lib và loại trừ các thư mục con


0

Tôi muốn tìm kiếm các tập tin trong thư mục hiện tại bắt đầu bằng "lib". Tôi muốn loại bỏ các thư mục phụ.

Tôi đang thử làm theo lệnh, nhưng nó không đưa ra bất kỳ tập tin nào. Bất cứ điều gì sai trong lệnh sau đây?

find -maxdepth 1 -name "lib*.*" -type "f"

Hãy nhớ quên DOS Hãy nghĩ rằng *.*bằng *. Bạn có thể muốn thêm vào câu hỏi của mình tại sao bạn nghĩ rằng thư mục hiện tại thực sự có tên tệp bắt đầu libvà có dấu chấm ở vị trí đầu tiên.
JdeBP

Câu trả lời:


2

Như đã đề cập trong một bình luận, trong Unix, *.*có nghĩa là tên tệp phải chứa một dấu chấm. Nếu tên tệp của bạn không chứa dấu chấm, hãy sử dụng -name "lib*"; ví dụ,

find . -maxdepth 1 -type f -name "lib*" -printf '%f\n'

1

Ví dụ của bạn hoạt động với tôi, miễn là tôi thực sự có trong thư mục:

$ cd /lib
$ find -maxdepth 1 -name "lib*.*" -type "f"
./libthread_db-1.0.so
./libfreebl3.so
./libnsl-2.12.so
./libnss_compat-2.12.so
./libcidn-2.12.so
./libdl-2.12.so
./libnss_hesiod-2.12.so
./libresolv-2.12.so
./libz.so.1.2.3
./libm-2.12.so
./libanl-2.12.so
./libpthread-2.12.so
./libutil-2.12.so
./libnss_dns-2.12.so
./libnss_files-2.12.so
./libcrypt-2.12.so
./libBrokenLocale-2.12.so
./libfreebl3.chk
./libnss_nisplus-2.12.so
./libSegFault.so
./libc-2.12.so
./librt-2.12.so
./libnss_nis-2.12.so

Tôi đoán bạn đã ban hành lệnh của bạn từ một thư mục khác. Trong mọi trường hợp, thông thường sẽ chỉ định thư mục bạn muốn sử dụng làm điểm bắt đầu, ví dụ:

find /lib -maxdepth 1 -name "lib*.*" -type "f"

Ngoài ra, như những người khác đã lưu ý trong các bình luận, *.*có nghĩa là tên tệp phải chứa '.' (vì nó xảy ra nếu tìm kiếm trong một thư mục chứa các thư viện thì rất có thể tất cả chúng sẽ chứa một dấu chấm).

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.