Câu 1Ký tự đại diện * khớp gì?
Tìm tệp — find và ký tự đại diện
Học cách chỉ định nhiều tên tệp cùng lúc bằng các ký tự đại diện * ? [], và cách find tìm theo tên với -name và theo loại với -type — thực hành ngay trên terminal trong trình duyệt.
Ký tự đại diện — * ? []
Ký tự đại diện là các ký hiệu để chỉ định một phần tên tệp theo lô.
* khớp một dãy không hoặc nhiều ký tự, ? khớp đúng một ký tự, và [] khớp bất kỳ một trong các ký tự bên trong dấu ngoặc.
Kết hợp chúng với ls, như ls *.txt, để chỉ liệt kê những tên khớp.
* khớp một dãy bất kỳ, ? khớp một ký tự, và [] khớp bất kỳ một ký tự bên trong dấu ngoặc.| Ký hiệu | Khớp gì | Ví dụ | Tệp khớp |
|---|---|---|---|
* | Một dãy không hoặc nhiều ký tự | *.txt | a.txt note.txt |
? | Đúng một ký tự | log?.txt | log1.txt (log10.txt không khớp) |
[...] | Bất kỳ một ký tự bên trong dấu ngoặc | log[12].txt | log1.txt log2.txt |
[a-c] | Bất kỳ một ký tự trong khoảng | f[a-c].txt | fa.txt fb.txt fc.txt |
touch a.txt b.txt note.log # tạo các tệp dữ liệu
ls *.txt # a.txt b.txt
ls *.log # note.log
ls ?.txt # a.txt b.txt (một ký tự + .txt)
Một ký tự hoặc một lựa chọn — ? và []
? luôn khớp đúng một ký tự, nên dùng nó khi bạn muốn cố định số lượng ký tự.
[] khớp bất kỳ một trong các ký tự viết bên trong dấu ngoặc, nên [12] là 1 hoặc 2, và bạn có thể viết một khoảng như [a-c].
Chúng thu hẹp đích chi tiết hơn so với *.
touch log1.txt log2.txt log9.txt logA.txt # tạo dữ liệu
ls log?.txt # 4 tệp với một ký tự cuối
ls log[12].txt # chỉ log1.txt log2.txt
Tìm theo điều kiện — find -name / -type
find duyệt đệ quy bên dưới một thư mục bắt đầu và tìm những thứ khớp một điều kiện.
Với find start -name 'pattern' bạn điều kiện theo tên, và với -type f (tệp) hoặc -type d (thư mục) bạn điều kiện theo loại.
Dùng nó để tìm tệp theo tên khi chúng nằm sâu trong cấu trúc phân cấp.
| Điều kiện | Ý nghĩa | Ví dụ |
|---|---|---|
-name 'pattern' | Tên khớp pattern | find . -name '*.log' |
-type f | Chỉ tệp thường | find . -type f |
-type d | Chỉ thư mục | find . -type d |
-name lọc theo pattern tên, -type f theo tệp, và -type d theo thư mục.mkdir -p tree/sub # tạo cây dữ liệu
touch tree/a.txt tree/sub/b.txt # đặt tệp trong cấu trúc phân cấp
find tree -name '*.txt' # tìm .txt dưới tree đệ quy
find tree -type d # chỉ thư mục dưới tree
Đặt pattern của find trong dấu nháy
Bao '*.txt' trong find . -name '*.txt' bằng dấu nháy đơn.
Không có dấu nháy, shell sẽ mở rộng * trước, có thể nhắm vào thứ khác với ý định của bạn.
Quy tắc cơ bản là đặt pattern của -name trong dấu nháy và truyền nó cho chính find.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2ls log[12].txt khớp những tệp nào?
Câu 3Điều gì được hiển thị khi bạn chạy find tree -type d?