Tôi đã thử xóa các tệp bắt đầu bằng A và kết thúc bằng 2 số nhưng không thực hiện được.
Những gì tôi đã cố gắng:
rm ^A*[0..9]2$
Tôi sai ở đâu
Tôi đã thử xóa các tệp bắt đầu bằng A và kết thúc bằng 2 số nhưng không thực hiện được.
Những gì tôi đã cố gắng:
rm ^A*[0..9]2$
Tôi sai ở đâu
Câu trả lời:
Bạn có thể sử dụng lệnh sau để xóa tất cả các tệp phù hợp với tiêu chí của bạn:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
Làm thế nào nó hoạt động:
ls
liệt kê tất cả các tệp (từng dòng một do kết quả được dẫn).
grep -P "^A.*[0-9]{2}$"
lọc danh sách các tệp và chỉ để lại những tệp khớp với biểu thức chính quy ^A.*[0-9]{2}$
.*
cho biết số lần xuất hiện của .
, .
ký tự đại diện khớp với bất kỳ ký tự nào.
[0-9]{2}
chỉ ra chính xác hai lần xuất hiện của [0-9]
, đó là, bất kỳ chữ số nào.
xargs -d"\n" rm
thực hiện rm line
một lần cho mỗi line
cái được dẫn đến nó.
Tôi sai ở đâu
Đối với người mới bắt đầu, rm
không chấp nhận biểu thức chính quy làm đối số. Bên cạnh ký tự đại diện *
, mọi nhân vật khác đều được đối xử theo nghĩa đen.
Ngoài ra, biểu hiện thường xuyên của bạn là hơi tắt. Ví dụ: *
có nghĩa là bất kỳ sự xuất hiện nào ...
trong một biểu thức chính quy, do đó , A*
khớp , v.v. và thậm chí là một chuỗi rỗng.A
AA
Để biết thêm thông tin, hãy truy cập Thường xuyên-Expressions.info .
-d"\n
tắc sửa lỗi không gian.
grep -P
(Perl regex). grep -E
có thể làm việc trong trường hợp này.
-I
với xargs
và luôn kiểm tra bằng các lệnh không gây chết người trước:xargs -d"\n" -I {} echo "{}"
ls
? Xem câu hỏi này mà chỉ đến bài viết này . Vì những cạm bẫy mà bạn có thể rm
không muốn.
Hoặc sử dụng find
:
find your-directory/ -name 'A*[0-9][0-9]' -delete
Giải pháp này sẽ đối phó với tên tập tin kỳ lạ .
-type f
xargs
cách tiếp cận với rm -f
.
Xem phần mở rộng tên tệp của trang bash man:
rm A*[0-9][0-9]
Giải pháp với regex tốt hơn 200 lần, thậm chí với đó bạn có thể xem tệp nào sẽ bị xóa trước khi sử dụng lệnh, cắt bỏ đường ống cuối cùng:
ls | grep -P "^A.*[0-9]{2}$"
Sau đó, nếu nó đúng, chỉ cần sử dụng:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
Điều này tốt hơn 200 lần vì nếu bạn làm việc với Unix, điều quan trọng là phải biết cách sử dụng grep. Nó rất mạnh nếu bạn biết cách sử dụng nó.
find
lệnh làm việc với regexes là tốt.
Kiểm tra những tập tin sẽ bị xóa
find . -regex '^A.*[0-9]{2}$'
Xóa các tập tin
find . -regex '^A.*[0-9]{2}$' -delete