Bạn có thể sử dụng find
cho việc này. Bạn có thể phủ nhận các bài kiểm tra find
bằng -not
hoặ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ừ data
thư mục.
find ! -path . ! -path ./100 ! -path ./101 ! -path "./100/[ab].txt" ! -path "./101/[cd].txt"
Thêm một ! -path ./path/to/dir
cho 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.txt
hoặc b.txt
hoặ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 -delete
và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