Cukup gunakan Bash's for
loop dan test
untuk menyaring direktori yang diinginkan dan rm -rf
perintah untuk menghapus direktori secara rekursif, seperti ini:
for x in /path/to/parent/*; do test "$x" != "dir_survive" && rm -rf "$x"; done
Ini mengulangi semua elemen (file dan direktori) di dalam /path/to/parent/
dan menghapus elemen secara rekursif jika namanya tidak sama dengan dir_survive
. Jika direktori induk adalah direktori saat ini, Anda hanya boleh menulis *
sebagai path.
Jika Anda tidak yakin dan ingin menguji elemen mana yang akan dihapus terlebih dahulu tanpa mengambil tindakan apa pun, cukup ganti rm -rf
dengan perintah di atas dengan echo
dan itu hanya akan menampilkan kandidat yang dihapus.
Berikut ini contoh yang dijalankan:
$ 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