Chỉ cần sử dụng forvòng lặp của Bash và testđể lọc các thư mục mong muốn và rm -rflệnh để xóa đệ quy các thư mục, như thế này:
for x in /path/to/parent/*; do test "$x" != "dir_survive" && rm -rf "$x"; done
Điều này lặp lại trên tất cả các phần tử (tệp và thư mục) bên trong /path/to/parent/và xóa phần tử theo cách đệ quy nếu tên của nó không bằng dir_survive. Nếu thư mục mẹ là thư mục hiện tại, bạn chỉ có thể viết *dưới dạng đường dẫn.
Nếu bạn không chắc chắn và muốn kiểm tra phần tử nào sẽ bị xóa trước mà không thực hiện bất kỳ hành động nào, chỉ cần thay thế rm -rflệnh trong ở trên echovà nó sẽ chỉ xuất ra các ứng cử viên xóa.
Đây là một ví dụ chạy:
$ tree
.
├── dir1
│ ├── subdir1
│ │ ├── file1
│ │ └── file2
│ └── subdir2
│ ├── file1
│ └── file2
├── dir2
│ ├── subdir1
│ │ ├── file1
│ │ └── file2
│ └── subdir2
│ ├── file1
│ └── file2
└── dir_survive
├── subdir1
│ ├── file1
│ └── file2
└── subdir2
├── file1
└── file2
9 directories, 12 files
$ for x in *; do test "$x" != "dir_survive" && rm -rf "$x"; done
$ tree
.
└── dir_survive
├── subdir1
│ ├── file1
│ └── file2
└── subdir2
├── file1
└── file2
3 directories, 4 files