Linux tìm tên tệp với chuỗi đã cho


107

Tôi đang sử dụng Ubuntu và tôi muốn tìm tất cả các tệp trong thư mục hiện tại và các thư mục con có tên chứa chuỗi "John". Tôi biết điều đó grepcó thể khớp với nội dung trong tệp, nhưng tôi không biết cách sử dụng nó với tên tệp. Bất kỳ trợ giúp sẽ được đánh giá cao.


Câu trả lời:


195

Sử dụng lệnh tìm ,

find . -type f -name "*John*"

1
Tạo một kịch bản bash tùy chỉnh với #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi sẽ cho phép bạn chỉ cần chạy F search-stringnhư một phím tắt hoàn hảo
Ilia Rostovtsev

@IliaRostovtsev - tốt, nhưng [ -z "$1" ]sẽ tốt hơn một chút.
Joe

@Joe Ah, đúng. Ý bạn là trong trường hợp đường dẫn có khoảng trắng? Nhưng ở đây chúng tôi chỉ kiểm tra sự tồn tại của $ 1 khoảng trống sẽ làm cho $ 2 xuất hiện và thế là xong. Ý bạn là nó tốt hơn về mặt lý thuyết, đúng không?
Ilia Rostovtsev

@IliaRostovtsev - Thực ra, tôi đã nhầm. Nếu $ 1 là null thì kiểm tra sẽ trở thành if [ -z ]. Tôi nghĩ rằng đó sẽ là một lỗi cú pháp, nhưng nó hoạt động. Tôi có thể đơn giản hóa một số mã của mình từ bây giờ.
Joe

25

Một câu trả lời đúng đã được cung cấp, nhưng để bạn học cách tự giúp mình, tôi nghĩ tôi sẽ đưa ra một thứ hữu ích theo một cách khác; nếu bạn có thể tóm tắt những gì bạn đang cố gắng đạt được trong một từ, có một tính năng trợ giúp tuyệt vời trên Linux.

man -k <your search term>

Điều đó làm là liệt kê tất cả các lệnh có cụm từ tìm kiếm của bạn trong mô tả ngắn. Thường có một cơ hội khá tốt là bạn sẽ tìm thấy những gì bạn đang theo đuổi. ;)

Đầu ra đó đôi khi có thể hơi quá tải và tôi khuyên bạn nên thu hẹp nó xuống các tệp thực thi, thay vì tất cả các trang người dùng có sẵn, như vậy:

man -k find | egrep '\(1\)'

hoặc nếu bạn cũng muốn tìm các lệnh yêu cầu mức đặc quyền cao hơn, như sau:

man -k find | egrep '\([18]\)'

3
Tôi tò mò ... một câu hỏi không cho thấy nỗ lực giải quyết vấn đề trong tầm tay thông qua tìm kiếm sẽ nhận được phiếu ủng hộ, lời giải thích thân thiện về cách tìm hiểu về các lệnh có thể được đưa ra. Tiêu chí là gì? :)
tink

1
tôi ủng hộ bạn. bài học là ít người có thể người đàn ông nó. nhưng chúng ta có thể xem mẫu và thích ứng :)
tgkprog

2

Các findlệnh sẽ mất thời gian dài vì nó quét các tập tin thực sự trong hệ thống tập tin.

Cách nhanh nhất là sử dụng locatelệnh, lệnh này sẽ cho kết quả ngay lập tức:

locate "John"

Nếu lệnh không được tìm thấy, bạn cần cài đặt mlocategói và chạy updatedblệnh trước để chuẩn bị cơ sở dữ liệu tìm kiếm lần đầu tiên.

Thông tin chi tiết tại đây: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab



1

Đây là một giải pháp rất đơn giản bằng cách sử dụng treelệnh trong thư mục bạn muốn tìm kiếm. -fhiển thị đường dẫn đầy đủ của tệp và |được sử dụng để dẫn đầu ra của cây grepđể tìm tệp chứa chuỗi filenametrong tên.

tree -f | grep filename
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.