Câu 1Ký tự đại diện * khớp gì?
Tìm tệp — find và ký tự đại diện
Bài viết này là một phần của Khóa học Linux, giúp bạn thành thạo từ đầu những kỹ năng Linux thực tiễn, từ các lệnh cơ bản đến lập trình shell script.
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?