Sử dụng mô hình hình cầu mở rộng trong bash:
rm ./!(*999*)
Điều này đòi hỏi shopt -s extglobphải được kích hoạt (và để đảm bảo an toàn, shopt -s failglobđể không có tệp nào có tên bất thường !(*999*)bị xóa do nhầm lẫn nếu tất cả tên tệp có chứa 999). Mẫu !(*999*)sẽ khớp với bất kỳ tên nào trong thư mục hiện tại, ngoại trừ những tên phù hợp *999*. Để xóa các tệp ẩn (các tệp có tên bắt đầu bằng dấu chấm ), cũng bật dotglobtùy chọn.
Để chỉ quan tâm đến các tệp thông thường hoặc liên kết tượng trưng đến các tệp thông thường (không phải thư mục, v.v.):
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
Các zshvỏ tương đương với vòng lặp trên sẽ là
rm ./(^(*999*))(.)
Lệnh đầu tiên của bạn sẽ không hoạt động vì grepsẽ nhìn vào bên trong các tệp. Nó sẽ xóa tất cả các tệp có dòng mà không có 999trong đó (bạn đã thêm --nulltùy chọn để nó hoạt động với xargs -0).
Lệnh thứ hai của bạn sẽ không hoạt động vì greptrên macOS không hỗ trợ --null-data(tuy nhiên nó không có --nulltùy chọn, nhưng chỉ dành cho khi tạo đầu ra tên tệp). Cũng lưu ý rằng nó sẽ tìm 999bất cứ nơi nào trong đường dẫn của tệp (bao gồm các thành phần thư mục), không chỉ tên của tệp.
grep -llàm cho nó liệt kê các tệp nơi tìm thấy kết quả khớp (hoặc không tìm thấy-v) trong nội dung , không phải tên tệp.grepluôn khớp với nội dung của các tệp bạn chỉ định, không bao giờ là tên của chúng.