Nội dung chính
======================================================
Đôi khi các bạn cần tìm 1 keyworld trong 1 file nào đó mà bạn không nhớ file đó nằm ở đâu, hoặc đơn giản là bạn cần tìm tất cả các file có chứa 1 từ khóa mà bạn cần thì hãy dùng cách sau:
find ./path -name "*.php" -exec grep -r -l -I "keyworld" {} \;
Path: là đường dẫn thư mục muốn tìm từ khóa
Keworld: từ khóa bạn muốn tìm
php: đuôi mở rộng của file cần tìm.
Ví dụ về lệnh tìm
Tìm các file có đuôi .list
find ./ -name “*.list” -exec grep -r -l -I “” {} \;
find ./ -name “*.html” -exec grep -r -l -I “” {} \;
Tìm tất cả các tệp có phần mở rộng .bak (* .bak) trong thư mục hiện tại và xóa chúng:
find . -type f -name "*.bak" -exec rm -f {} \;
HOặc
find . -type f -name "*.bak" -delete
===================================================================================
Đôi khi cần phải tìm ra tất cả các tệp và xóa chúng chỉ trong một lần.
Tuy nhiên, lệnh rm không hỗ trợ tiêu chí tìm kiếm. Ví dụ: tìm tất cả các tệp “* .bak” và xóa chúng. Đối với những nhu cầu cần thiết như vậy, bạn cần sử dụng lệnh find để tìm kiếm các tệp trong thư mục và xóa chúng ngay lập tức. Bạn có thể kết hợp lệnh find và rm với nhau. Trang này giải thích cách tìm và xóa tệp bằng một lệnh khi di chuyển
Tìm và xóa tệp bằng một lệnh khi di chuyển
Cú pháp lệnh tìm cơ bản như sau
find dir-name criteria action
- dir-name: – Xác định thư mục làm việc như look into / tmp /
- criteria: Sử dụng để chọn các tệp như “* .sh”
- action: Hành động tìm (việc cần làm trên tệp) chẳng hạn như xóa tệp.
Bạn muốn xóa nhiều tệp như ‘* .jpg’ hoặc ‘* .sh’ bằng một lệnh tìm, hãy thử:
find . -name "FILE-TO-FIND" -exec rm -rf {} \;
Hoặc
find /dir/to/search/ -type f -name "FILE-TO-FIND-Regex" -exec rm -f {} \;
Sự khác biệt duy nhất giữa hai cú pháp trên là lệnh đầu tiên loại bỏ thư mục cũng như lệnh thứ hai chỉ xóa tệp. Ở đâu, các tùy chọn như sau:
- -name "FILE-TO-FIND": Mẫu tệp.
- -exec rm -rf {} \;: Xóa tất cả các tệp được khớp theo mẫu tệp.
- -type f: Chỉ khớp các tệp và không bao gồm tên thư mục.
- -type d: Chỉ khớp các dirs và không bao gồm tên tệp.
Phiên bản hiện đại của lệnh tìm cũng có -deletetùy chọn. Thay vì sử dụng -exec rm -rf {} \;, hãy sử dụng -deleteđể xóa tất cả các tệp phù hợp. Chúng tôi cũng có thể chuyển -depthtùy chọn một cách rõ ràng cho tìm kiếm để xử lý nội dung của từng thư mục trước chính thư mục đó. Cũng có thể sử dụng -maxdepthtùy chọn để kiểm soát việc giảm xuống ở hầu hết các cấp của thư mục bên dưới điểm bắt đầu. Ví dụ, -maxdepth 0có nghĩa là chỉ áp dụng các bài kiểm tra và hành động cho chính điểm xuất phát. Tương tự, chúng ta có thể vượt qua kết -mindepthquả tìm được. Nó có nghĩa là không áp dụng bất kỳ thử nghiệm hoặc hành động nào ở các cấp nhỏ hơn cấp (một số nguyên không âm). Đối với exampe, -mindepth 1có nghĩa là xử lý tất cả các tệp ngoại trừ điểm bắt đầu. Vì vậy, đây là một cú pháp đơn giản:
find /dir/to/search/ -type f -name "FILES-TO-FIND" -delete find /dir/to/search/ -type f -name "FILES-TO-FIND" -depth -delete find /dir/to/search/ -maxdepth 2 -type f -name "FILES-TO-FIND" -depth -delete
Ví dụ về lệnh tìm
Tìm tất cả các tệp có phần mở rộng .bak (* .bak) trong thư mục hiện tại và xóa chúng:
find . -type f -name "*.bak" -exec rm -f {} \;
HOặc
find . -type f -name "*.bak" -delete
Tìm tất cả các tệp lõi trong thư mục / (gốc) và xóa chúng (hãy cẩn thận với lệnh này): Tìm tất cả các tệp * .bak trong thư mục hiện tại và xóa chúng với xác nhận từ người dùng: Kết quả đầu ra mẫu:
# find / -name core -exec rm -f {} \; ### OR ### # find / -name core -delete
$ find . -type f -name "*.bak" -exec rm -i {} \;
rm: remove regular empty file `./data0002.bak'? y rm: remove regular empty file `./d234234234fsdf.bak'? y rm: remove regular empty file `./backup-20-10-2005.bak'? n
Luôn luôn hoạt động -deletetốt hơn vì nó không phải tạo ra một quy trình bên ngoài chẳng hạn như rm cho mọi tệp phù hợp. Tuy nhiên, -deletetùy chọn này có thể không có sẵn trên tất cả các phiên bản tìm kiếm. Do đó, chúng ta cũng có thể sử dụng lệnh xargs như sau:
find . -type f -name "*.err" -print0 | xargs -I {} -0 rm -v "{}"
Trường hợp tùy chọn lệnh tìm như sau:
- -print0– Buộc tìm lệnh để in tên tệp đầy đủ trên đầu ra chuẩn, theo sau là ký tự null (thay vì ký tự dòng mới mà -print sử dụng). Điều này cho phép các tên tệp chứa dòng mới hoặc các loại khoảng trắng khác được các chương trình xử lý kết quả tìm kiếm diễn giải một cách chính xác. Tùy chọn này tương ứng với tùy chọn -0 của xargs.
Và các tùy chọn lệnh xargs như sau:
- -I {}: Thay thế các lần xuất hiện của {} trong các đối số ban đầu bằng các tên được đọc từ đầu vào chuẩn. Chúng tôi chuyển {} như đối số với lệnh rm.
- -0: Các mục đầu vào được kết thúc bằng một ký tự rỗng thay vì bằng khoảng trắng, và dấu ngoặc kép và dấu gạch chéo ngược không đặc biệt (mọi ký tự đều được hiểu theo nghĩa đen). Vô hiệu hóa phần cuối của chuỗi tệp, được xử lý giống như bất kỳ đối số nào khác. Hữu ích khi các mục đầu vào có thể chứa khoảng trắng, dấu ngoặc kép hoặc dấu gạch chéo ngược. Tùy chọn GNU find -print0 tạo ra đầu vào phù hợp cho chế độ này.
- rm -v "{}": Chạy lệnh rm trên các tệp phù hợp.
Sự kết luận
Đọc các trang man sau bằng cách sử dụng lệnh man : Để biết thông tin chi tiết về lệnh find, vui lòng xem phần tìm kiếm / định vị tệp bằng lệnh find phần # 1 , Phần # 2 .
man find man xargs man rm
Nguồn: https://www.cyberciti.biz/faq/linux-unix-how-to-find-and-remove-files/