Câu trả lời:
Sử dụng tìm cho rằng:
find . -name "foo*"
find
cần một điểm bắt đầu và .
(dấu chấm) trỏ đến thư mục hiện tại.
find . foo*
, foo*
nó sẽ được mở rộng VÀ thông qua để tìm.
" "
là rất cần thiết cho tìm kiếm đệ quy.
find . -name "foo*" 2>/dev/null
Tìm đường ống vào grep thường thuận tiện hơn; nó cung cấp cho bạn toàn bộ sức mạnh của các biểu thức thông thường để khớp ký tự đại diện tùy ý.
Ví dụ: để tìm tất cả các tệp có chuỗi không phân biệt chữ hoa chữ thường "foo" trong tên tệp:
~$ find . -print | grep -i foo
find
cũng có -iname
, -regex
và -iregex
cờ cho case-insensitive ký tự đại diện, regex, và case-insensitive khớp regex, vì vậy đường ống để grep
là không cần thiết.
find
lệnh hỗ trợ các tùy chọn đó. Đôi khi grep
trở thành lựa chọn duy nhất.
find
sẽ tìm thấy tất cả các tệp khớp với một mẫu:
find . -name "*foo"
Tuy nhiên, nếu bạn muốn có một hình ảnh:
tree -P "*foo"
Hi vọng điêu nay co ich!
brew install tree
dành cho người dùng Mac OSX apt-get
được cài đặt
find -L . -name "foo*"
Trong một vài trường hợp, tôi cần tham số -L để xử lý các liên kết thư mục tượng trưng. Theo mặc định liên kết tượng trưng được bỏ qua. Trong những trường hợp đó, điều này khá khó hiểu vì tôi sẽ thay đổi thư mục thành thư mục con và xem tệp phù hợp với mẫu nhưng find sẽ không trả về tên tệp. Sử dụng -L giải quyết vấn đề đó. Các tùy chọn liên kết tượng trưng để tìm là -P -L -H
Nếu hệ vỏ của bạn hỗ trợ tùy chọn toàn cầu mới (có thể được bật bởi shopt -s globstar
:), bạn có thể sử dụng:
echo **/*foo*
để tìm bất kỳ tập tin hoặc thư mục đệ quy. Điều này được hỗ trợ bởi Bash 4, zsh và các shell tương tự.
Cá nhân tôi đã xác định hàm shell này:
f() { find . -name "*$1*"; }
Lưu ý: Dòng trên có thể được dán trực tiếp vào shell hoặc thêm vào ~/.bashrc
tệp người dùng của bạn .
Sau đó tôi có thể tìm bất kỳ tập tin nào bằng cách gõ:
f some_name
Ngoài ra, bạn có thể sử dụng một fd
tiện ích với một cú pháp đơn giản, ví dụ fd pattern
.
shopt -s globstar
lệnh. Điều này được hỗ trợ trong Bash, zsh và shell tương tự.
bash-3.2$ shopt -s globstar
chobash: shopt: globstar: invalid shell option name
fd
Trong trường hợp, find
quá chậm, hãy thử fd
tiện ích - một cách thay thế đơn giản và nhanh chóng để find
viết bằng Rust.
Cú pháp:
fd PATTERN
Bản giới thiệu:
Trang chủ: https://github.com/sharkdp/fd
asciicast2vector
có thể được sử dụng.
find <directory_path> -type f -name "<wildcard-match>"
Trong kết hợp ký tự đại diện, bạn có thể cung cấp chuỗi bạn muốn khớp, ví dụ: * .c (cho tất cả các tệp c)
Bạn có thể dùng:
# find . -type f -name 'text_for_search'
Nếu bạn muốn sử dụng REGX, hãy sử dụng -iname
# find . -type f -iname 'text_for_search'
Cách mặc định để tìm kiếm tệp đệ quy và có sẵn trong hầu hết các trường hợp là
find . -name "filepattern"
Nó bắt đầu duyệt qua đệ quy cho tên tệp hoặc mẫu từ trong thư mục hiện tại nơi bạn được định vị. Với lệnh find, bạn có thể sử dụng ký tự đại diện và các công tắc khác nhau để xem danh sách đầy đủ các tùy chọn, nhập
man find
hoặc nếu trang man không có sẵn trong hệ thống của bạn
find --help
Tuy nhiên, sau đó, có nhiều công cụ hiện đại và nhanh hơn, tìm thấy toàn bộ hệ thống tệp của bạn và lập chỉ mục các tệp của bạn, một công cụ phổ biến như vậy là định vị hoặc định vị / mlocate, bạn nên kiểm tra hướng dẫn sử dụng HĐH của mình để biết cách cài đặt và đã cài đặt nó cần khởi tạo cơ sở dữ liệu, nếu tập lệnh cài đặt không làm điều đó cho bạn, nó có thể được thực hiện thủ công bằng cách nhập
sudo updatedb
Và, để sử dụng nó để tìm kiếm một số loại tệp cụ thể
locate filename
Hoặc, để tìm tên tệp hoặc patter từ trong thư mục hiện tại, bạn có thể nhập:
pwd | xargs -n 1 -I {} locate "filepattern"
Nó sẽ xem qua cơ sở dữ liệu của các tệp và nhanh chóng in ra các tên đường dẫn khớp với mẫu mà bạn đã nhập. Để xem danh sách đầy đủ các tùy chọn định vị, nhập:
locate --help
hoặcman locate
Ngoài ra, bạn có thể định cấu hình định vị để cập nhật cơ sở dữ liệu vào thời gian đã lên lịch thông qua công việc định kỳ, vì vậy cron mẫu cập nhật db lúc 1AM sẽ như sau:
0 1 * * * updatedb
Các công việc cron này cần được cấu hình bởi root, vì updateb cần đặc quyền root để duyệt toàn bộ hệ thống tập tin.
Tôi ngạc nhiên khi thấy rằng định vị không được sử dụng nhiều khi chúng ta phải đi đệ quy.
Trước tiên tôi sẽ định vị "$ PWD" để lấy danh sách các tệp trong thư mục quan tâm hiện tại, sau đó chạy các greps trên chúng khi tôi muốn.
locate "$PWD" | grep -P <pattern>
Tất nhiên, điều này giả định rằng việc cập nhật được thực hiện và chỉ mục được cập nhật định kỳ. Đây là cách nhanh hơn để tìm tệp hơn là chạy tìm và yêu cầu nó đi xuống cây. Đề cập đến điều này cho đầy đủ. Không có gì chống lại việc sử dụng find, nếu cây không nặng lắm.
locate "$PWD*.mp4"
Chỉ để nhắc nhở rằng bạn có thể bỏ quagrep
Lệnh bên dưới giúp tìm kiếm mọi tệp
1) Không phân biệt trường hợp
2) Kết quả Loại trừ các thư mục mà không được phép
3) Tìm kiếm từ thư mục gốc hoặc từ đường dẫn bạn thích. Thay đổi / với đường dẫn bạn thích.
Cú pháp:
tìm -iname '' 2> & 1 | grep -v "Quyền bị từ chối"
Ví dụ
tìm / -iname 'C * .xml' 2> & 1 | grep -v "Quyền bị từ chối"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
Nếu bạn muốn tìm kiếm tệp đặc biệt bằng ký tự đại diện, bạn có thể sử dụng mã sau:
find . -type f -name "*.conf"
Giả sử, bạn muốn tìm kiếm mọi tệp .cs từ đây:
.
có nghĩa là tìm kiếm bắt đầu từ đây (vị trí hiện tại)
-type
có nghĩa là loại mục tìm kiếm mà ở đây là tệp (f).
-name
có nghĩa là bạn muốn tìm kiếm các tệp có tên * .conf .
Sử dụng
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Giải trình
find
không đệ quy.-o
viết tắt cho -or
. Vì vậy, ở trên có nghĩa là tìm kiếm ký tự đại diện này HOẶC cái này. Nếu bạn chỉ có một mẫu thì không cần -o
.