Làm thế nào tôi có thể tìm kiếm một tập tin theo tên và đường dẫn một phần của nó?


64

Thường thì tôi có một tên tệp và đó là một phần đường dẫn, ví dụ: "content / docs / file.xml".

Có một cách đơn giản để tìm kiếm tệp đó, mà không cần tự cắt thành các phần tên của nó để cung cấp tên thư mục và tên tệp riêng biệt?

Thật tuyệt nếu findlàm việc theo cách đó, vì vậy tôi có thể chạy find content/docs/file.xml, nhưng tiếc là nó không hoạt động.


1
Bạn có thể thử thêm ký tự * vào lúc đầu. find -path *content/docs/file.xmlđã làm cho tôi.
Bob

cảm ơn, @Bob, nó thực sự hiệu quả với tôi Btw, thật thú vị, nếu tôi thêm dấu gạch chéo sau dấu hoa thị: "find -path * / content / docs / file.xml", thì nó không hoạt động. Dù sao cũng cảm ơn rất nhiều.

Ngoài ra, @Bob, vui lòng đặt câu trả lời và tôi sẽ đánh dấu nó là chính xác.

Lý do dấu gạch chéo sau dấu hoa thị không hoạt động có lẽ là do dấu hoa thị đã được thoát, xem phần chỉnh sửa để trả lời của tôi.
Bob

Câu trả lời:


72

Vượt qua trong một *ký tự đại diện để chỉ ra một trận đấu cho bất cứ điều gì . Bạn cũng cần thoát *s, vd:

find . -path \*content/docs/file.xml

hoặc kèm theo mẫu trong dấu ngoặc kép, vd:

find . -path "*content/docs/file.xml"

Như trang người đàn ông mô tả nó:

$ tìm. -name * .c -print

tìm: đường dẫn phải đi trước biểu thức

Điều này xảy ra vì * .c đã được mở rộng bởi shell dẫn đến việc tìm kiếm thực sự nhận được một dòng lệnh như thế này:

tìm thấy . -name bigram.c code.c frcode.c định.c -print

Lệnh đó tất nhiên là không đi làm. Thay vì thực hiện mọi thứ theo cách này, bạn nên đặt mẫu trong dấu ngoặc kép hoặc thoát khỏi thẻ wild:

$ tìm. -name \ *. c -print


10

tìm có một tùy chọn -wholename quá find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword

Tôi không biết đường dẫn đầy đủ, chỉ một phần, vì vậy "-wholename" sẽ không hoạt động.

cờ bị đánh lừa, xem ví dụ của tôi ... nó chỉ cho phép bạn mở rộng chuỗi vào một thư mục nếu bạn biết
technosaurus

3
find . -type f | grep "content/docs/file.xml"

hoặc chỉ

locate content/docs/file.xml

định vị là một tùy chọn thú vị, nhưng nó tìm kiếm toàn bộ đĩa, tôi muốn có khả năng chỉ định thư mục tìm kiếm cơ sở hoặc ít nhất là chỉ định sử dụng param, tìm kiếm đó phải được thực hiện từ thư mục này (giống như tùy chọn đầu tiên của bạn) , không phải từ gốc.

1
@ user69817 - ngược lại, xác định vị trí không tìm kiếm đĩa, nó sẽ thẩm vấn cơ sở dữ liệu định vị, thường được điền qua cron mỗi ngày một lần.
tink

1

Ví dụ: tìm kiếm tệp trong một vị trí bằng dấu hoa thị / ký tự đại diện ( *) như: dir=“/apps/*/instance01/" bạn có thể sử dụng find ${dir} -name “*.jks”. đặt tất cả các tệp trong một mảng như thế này:

arr=(`find ${dir} -name “*.jks"`)

nếu bạn muốn nhận tệp với các tiện ích mở rộng khác, hãy sử dụng 'hoặc' như thế này:

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" bởi vì -namechỉ chấp nhận chuỗi đơn nên sử dụng 'hoặc'.

Cuối cùng đặt mọi thứ trong mảng như thế này:

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

nếu bạn có các đường dẫn đầy đủ chứ không phải các đường dẫn một phần thì việc đặt chúng vào các mảng như thế này sẽ dễ dàng hơn nhiều:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
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.