Misalkan di bawah direktori saat ini, ada beberapa subdirektori, dan satu disebut A.
Bagaimana cara menghapus semua sub-direktori kecuali A dengan Bash?
Bash telah menambah globbing (tes pertama, lalu hapus gema):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Anda dapat melihat apakah plugin diaktifkan.sumber
Bagaimana dengan:
Ini menghindari beberapa "kelangkaan" kesalahan ketik pada perintah lain.
sumber
Sesuatu seperti
harus dilakukan.
sunting
Seharusnya memang begitu
untuk mencegah
find
berulang di bawah A.sumber
saya biasanya melakukan ini dengan menjalankan perintah ls yang mendapatkannya dengan benar terlebih dahulu. Saya tidak di mesin unix, tetapi sesuatu seperti:
ls -lda "[^ A]"
Setelah Anda melakukannya dengan benar, pipa ke perintah
ls -lda "[^ A]" | xargs rm -rf
Jangan ragu untuk mengedit di atas jika ekspresi reguler saya salah ...
sumber
Jika Anda ingin lebih fleksibel tetapi manual, Anda dapat melakukannya:
Dengan begitu Anda bisa melakukan munging umum.
sumber
Ini satu cara. Hati-hati dengan hal semacam ini, meskipun, itu sangat kuat sehingga hanya bisa digunakan untuk kebaikan atau kejahatan ...
sumber
Jangan gunakan find karena beberapa orang telah menunjukkan dengan -exec dan rm tanpa melewati -print0 untuk menemukan dan -0 ke xargs. Ini akan menjadi bingung pada nama file dengan spasi atau baris baru:
Alih-alih gunakan find-print0 dengan xargs -0, '-exec command {} +', atau -delete jika find Anda mendukungnya.
sumber
Lihat juga di sini:
/programming/862388/delete-all-files-directories-except-two-specific-directories
sumber
Selain contoh sebelumnya:
Anda juga dapat melakukan:
untuk menghindari keharusan
cd some/subdir
pertama.sumber