Chỉ cần sử dụng for
vòng lặp của Bash và test
để lọc các thư mục mong muốn và rm -rf
lệ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 -rf
lệnh trong ở trên echo
và 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