Câu trả lời:
Tương đương trực tiếp là
find . -iname <filename>
sẽ liệt kê tất cả các tệp và thư mục được gọi <filename>
trong thư mục hiện tại và mọi thư mục con, bỏ qua trường hợp.
Nếu phiên bản tìm kiếm của bạn không hỗ trợ -iname
, bạn có thể sử dụng -name
thay thế. Lưu ý rằng không giống như -iname
, -name
là trường hợp nhạy cảm.
Nếu bạn chỉ muốn liệt kê các tệp được gọi <filename>
và không phải thư mục, hãy thêm-type f
find . -iname <filename> -type f
Nếu bạn muốn sử dụng ký tự đại diện, bạn cần đặt dấu ngoặc kép xung quanh nó, vd
find . -iname "*.txt" -type f
nếu không thì vỏ sẽ mở rộng nó.
Như những người khác đã chỉ ra, bạn cũng có thể làm:
find . | grep "\.txt$"
grep
sẽ in các dòng dựa trên các biểu thức thông thường, mạnh hơn các ký tự đại diện, nhưng có một cú pháp khác.
Xem man find
và man grep
để biết thêm chi tiết.
<filename>
làm điểm đánh dấu cho userinput là một thói quen xấu trong môi trường dòng lệnh, trong đó < and >
hầu hết thời gian có ý nghĩa cụ thể. Tôi đề nghị chỉ sử dụng filename
, có thể PHIM để nhấn mạnh nó. Hầu hết mọi người sẽ hiểu, và những người, những người sẽ không, có thể gây hại khi không hiểu rằng họ không nên đánh ít hơn hoặc lớn hơn dấu hiệu.
<filename>
là một quy ước trong rất nhiều tài liệu UNIX, vì vậy tôi nghĩ nó hữu ích cho mọi người biết về nó, nhưng tôi đồng ý FILENAME
có thể dễ hiểu hơn.
find -iname <filename>
là tốt hơn vì nó không phân biệt chữ hoa chữ thường như DOS
Một số vỏ cho phép ls **/filename
, khá thuận tiện.
shopt -s globstar; echo **/filename
tương đương với find . -name "filename"
. Nó cũng hoạt động trong zsh.
shopt -s globstar
, nó có thể sẽ làm việc cho bạn. Globing đệ quy là một tính năng chỉ có sẵn trong một số shell và đôi khi, nó không được bật theo mặc định.
shopt
lệnh cho phép tùy chọn globstar on
. Bây giờ nó hoạt động như một nét duyên dáng. Cảm ơn rất nhiều.
Bạn có thể làm điều này với
find . | egrep filename
find . -regextype posix-egrep -regex '.*filename.*'
(Tôi không biết egrep
phần đó có quan trọng không, nhưng bạn đã sử dụng egrep
trong câu trả lời của mình nên tôi đã đưa nó vào)
grep
sử dụng các biểu thức thông thường, trong khi lệnh DOS sử dụng các ký tự đại diện.
find . -name "*.*"
sẽ không làm những gì bạn mong đợi từ nền DOS. Quả cầu đủ gần để có thể nhận ra, mặc dù, trong khi regex là một con thú hoàn toàn mới.
*.*.*
trong một dos hiện đại tức là windows cmd? Thế còn *.*.*.*
?
Nó cũng có thể: tree -if </your/path>
hoặc 'pwd'
như một con đường
<filename>
có chứa ký tự đại diện, hãy sử dụng dấu ngoặc kép quanh nó, vdfind . -name '*.txt'
.