Saya ingin menghapus direktori B dan D. Tetapi saya ingin menyimpan C dan semua file turunan dan direktori. Apa perintah untuk menghapus semua direktori anak-anak dari direktori induk kecuali satu direktori dan anak-anaknya.
Bantuan dihargai.
filesystem
directory
directory-structure
Joe Saad
sumber
sumber
A
dalam contoh Anda)? Hapus juga atau simpan?Jawaban:
Apa yang Anda inginkan adalah perintah ini:
Demo:
Penjelasan:
find DIRECTORY
panggil perintah find untuk beroperasi pada DIREKTORI-mindepth 1
: hanya bekerja dengan isi direktori, hindari direktori itu sendiri yang level 0-maxdepth 1
: mencegah turun ke subdirektori (rm -rf
toh bersifat rekursif, jadi kami tidak perlu turun ke subdirektori untuk menghapusnya)-type d
: hanya mencari direktori-not \( -name "keepMe" \)
abaikan item dengan nama yang ingin Anda simpan-exec rm -rf {} \;
melakukan penghapusan pada setiap item yang ditemukansumber
find
adalah teman yang baik di sini, tetapi Bashfor
dantest
teman yang lebih baik ...>: - DMenggunakan fitur glob bash shell yang diperluas (yang diaktifkan secara default di instalasi Ubuntu saat ini), diberikan
Anda dapat mengatasi segala sesuatu yang dikecualikan
C
dan isinya menggunakan ekspresi globA/!(C)
yaituJadi untuk menghapus semuanya kecuali direktori
C
dan isinya Anda cukup menggunakanpergi
sumber
('"
ketika saya menjalankannya dari jarak jauh melaluissh $VM_ADDRESS "rm -rf $APP_FOLDER/!(node_modules)"
. Ada ide? Terima kasih banyak.extglob
opsi shell hanya diaktifkan untuk shell interaktif - tidak yakin apakah Anda dapat memaksassh
untuk melakukannyaSalah satu cara mudah adalah menggunakan trash-cli
Anda dapat menginstalnya dengan
sudo apt-get install trash-cli
Setelah terinstal, Anda dapat menavigasi ke direktori induk A dengan
cd /A
dan kemudian mengeluarkan perintah ditrash B D
mana B dan D adalah direktori yang ingin Anda hapus (mereka akan berakhir di tempat sampah untuk drive mereka berada di jadi jika Anda membuat kesalahan Anda bisa pulihkan file)Diuji di bawah Ubuntu 16.04 dan 14.04
sumber
trash ! C
?trash: cannot trash non existent
! '`extglob
.Cukup gunakan Bash's
for
loop dantest
untuk menyaring direktori yang diinginkan danrm -rf
perintah untuk menghapus direktori secara rekursif, seperti ini:Ini mengulangi semua elemen (file dan direktori) di dalam
/path/to/parent/
dan menghapus elemen secara rekursif jika namanya tidak sama dengandir_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 denganecho
dan itu hanya akan menampilkan kandidat yang dihapus.Berikut ini contoh yang dijalankan:
sumber