Bạn có thể sử dụng findcho việc này. Bạn có thể phủ nhận các bài kiểm tra findbằng -nothoặc !. Điều này sẽ loại trừ các trận đấu, thay vì tìm thấy chúng.
Bạn nên cẩn thận không xóa bất kỳ thư mục mẹ nào của các tệp bạn muốn giữ, đặc biệt là thư mục hiện tại . , vì vậy hãy đảm bảo bạn đọc kỹ đầu ra trước khi xóa.
Dựa trên ví dụ của bạn, bạn có thể làm một cái gì đó như thế này từ datathư mục.
find ! -path . ! -path ./100 ! -path ./101 ! -path "./100/[ab].txt" ! -path "./101/[cd].txt"
Thêm một ! -path ./path/to/dircho bất kỳ con đường bạn muốn tránh xóa. Bạn có thể sử dụng các siêu ký tự như *, nhưng đảm bảo rằng bạn trích dẫn biểu thức nếu bạn làm, ví dụ "./path*dir", để ngăn chặn mọi mở rộng không mong muốn.
findđược đệ quy theo mặc định. Ngay cả khi chúng tôi không tìm thấy ./100ở đây, chúng tôi sẽ tìm thấy tất cả nội dung của nó trừ khi chúng khớp với mẫu [ab].txt. Nếu bạn không thể khớp tất cả các tên bạn muốn giữ, hãy thêm một bài kiểm tra khác:
! -path "./100/[ab].txt" ! -path ./100/foo
Điều này sẽ không tìm thấy a.txthoặc b.txthoặc foo, nhưng nó sẽ tìm thấy tất cả các file khác.
Khi bạn chắc chắn bạn thấy những gì bạn muốn, bạn có thể thêm -deletevào cuối để xóa các tập tin tìm thấy:
find ! -path . ! -path ./100 ! -path ./101 ! -path "./100/[ab].txt" ! -path "./101/[cd].txt" -delete