[ad_1]
Mọi thứ trong Linux đều được lưu trữ trong các thư mục và khi viết các tập lệnh bash, việc tìm kiếm các thư mục theo tên thường rất hữu ích. May mắn thay, bạn có thể sử dụng find
lệnh để tìm kiếm đệ quy tên thư mục và hiển thị các kết quả phù hợp.
Tìm kiếm thư mục
Các find
lệnh được sử dụng để tìm kiếm thông qua các thư mục trong Linux. Theo mặc định, nó hoàn toàn đệ quy, vì vậy nó sẽ tìm kiếm qua tất cả các thư mục con để tìm các kết quả phù hợp.
Nếu bạn sử dụng -type d
lá cờ, find
sẽ hoạt động ở “chế độ thư mục” và chỉ tìm kiếm các thư mục, không khớp với bất kỳ tệp nào. Bạn có thể sử dụng nó cùng với -name
để tìm kiếm các thư mục theo tên:
find . -type d -name "search"
Lệnh này bắt đầu trong thư mục hiện tại nhưng cũng có thể tìm kiếm trong các thư mục khác như ~
.
Vấn đề với việc sử dụng -name
là nó sẽ chỉ khớp với các tên trực tiếp, có nghĩa là nó sẽ thất bại trừ khi nó khớp với toàn bộ tên thư mục. Tuy nhiên, bạn có thể sử dụng ký tự đại diện để giải quyết vấn đề này và đặt ký tự đại diện trước và sau chuỗi tìm kiếm sẽ khớp với chuỗi con ở bất kỳ vị trí nào trong tên thư mục. Nếu bạn cũng đang bao gồm tên tệp, bạn có thể sử dụng ký tự đại diện để khớp các tệp kết thúc bằng một phần mở rộng cụ thể
find . -type d -name "*search*"
Tuy nhiên, điều này sẽ chỉ khớp với tên của thư mục và sẽ vẫn bỏ qua thư mục mẹ. Nếu bạn muốn đối sánh bằng cách sử dụng toàn bộ đường dẫn tệp, bạn sẽ cần sử dụng tùy chọn Regex được đề cập bên dưới.
find
sẽ in ra danh sách mọi thư mục phù hợp, nhưng bạn sẽ cần cẩn thận để đảm bảo rằng mình nhất quán trong việc sử dụng đường dẫn tuyệt đối hoặc đường dẫn tương đối, vì nó sẽ ảnh hưởng đến phản hồi cuối cùng. Nếu bạn sử dụng một đường dẫn tương đối, chẳng hạn như dấu chấm cho “thư mục hiện tại”, các phản hồi sẽ tương đối. Nhưng nếu bạn chỉ định đường dẫn trực tiếp, ngay cả khi đó là thư mục hiện tại, đường dẫn sẽ là tuyệt đối, bắt đầu từ gốc.
find
còn không chỉ tìm kiếm văn bản — nó có thể được sử dụng để so khớp các tệp dựa trên dấu thời gian, kích thước tệp và các số nhận dạng Linux khác. Nó cũng có thể được sử dụng với -exec
để chạy các lệnh trên mỗi tệp hoặc thư mục.
CÓ LIÊN QUAN: Cách sử dụng lệnh find trong Linux
Tìm kiếm với Regex
Bạn cũng có thể sử dụng tính năng lọc nâng cao hơn với find
sử dụng nó với các biểu thức chính quy (Regex) để tìm các kết quả phù hợp cho các truy vấn tìm kiếm phức tạp.
Một lợi ích chính của việc sử dụng Regex là nó sẽ khớp với toàn bộ thư mục, bao gồm cả các thư mục cơ sở dẫn đến.
Bạn có thể sử dụng Regex với -regex
thay cho -name
. Nó cũng giúp bật sed
-tương thích với Regex bằng cách sử dụng -regextype sed
.
tìm thấy . -type d -regextype sed -regex “. * one /.*”
Trong ví dụ này, regex bắt đầu bằng .*one
để khớp với tất cả các thư mục kết thúc bằng “một”. Dấu chấm và ký tự đại diện sẽ khớp với bất kỳ chuỗi con nào dẫn đến điều này. Sau đó, dấu gạch chéo phía trước được thoát khỏi /
để khớp với phần cuối của thư mục và sau đó là một ký tự đại diện khác để khớp với bất kỳ tên thư mục nào.
Nhìn chung, điều này sẽ khớp với bất kỳ thư mục nào có cha kết thúc bằng “một”, ở bất kỳ đâu, ngay cả trong các thư mục con. Regex rất mạnh mẽ và bạn sẽ muốn cẩn thận rằng phần mềm của bạn khớp chính xác với những gì bạn muốn nó làm — không hơn, không kém.
Sử dụng grep Với tìm
Từ find
cũng có thể xuất ra một danh sách thư mục thô, nó có thể được chuyển tới các lệnh khác để xử lý. Ví dụ, grep
được sử dụng như một tiện ích tìm kiếm văn bản và sử dụng nhanh trên dòng lệnh để tìm kiếm và đánh dấu đơn giản.
find . -type d | grep foo
grep
cũng là một tiện ích tìm kiếm chính thức của riêng nó và có thể được sử dụng với các công cụ như cụm từ thông dụng để nâng cao khả năng tìm kiếm. Bạn có thể đọc hướng dẫn sử dụng nó để tìm hiểu thêm.
CÓ LIÊN QUAN: Cách sử dụng lệnh grep trên Linux
[ad_2]