Apakah ada perintah untuk menghapus semua file dan subdirektori dalam direktori TANPA menghapus direktori?
Sebagai contoh jika saya memiliki direktori "dontDeleteMe" dengan subdirektori "1", "2", "3" dan masing-masing subdirektori memiliki beberapa gambar di dalamnya, bagaimana saya dapat menghapus subdirektori "1", "2", dan "3" dan semua file di dalamnya, tanpa menghapus direktori induk "dontDeleteMe"?
sumber
find dontDeleteMe/* -print0 | xargs -0 rm -rv
Saya percaya dalam banyak kasus ini akan berhasil, terlepas dari ruang, dan apa yang tidak. Tetapi lakukan cd ke/tmp/
dan buat direktori tes dan cobalah. :)rm -rf dontDeleteMe && mkdir dontDeleteMe
tidak memastikan bahwa dir dibuat kembali dengan izin / pemilik yang sama. Sebagai gantinya, gunakan salah satufind dontDeleteMe/ -mindepth 1 -delete
varian di bawah ini.Satu-satunya alasan
rm -r ./*
tidak selalu berfungsi adalah karena Anda dapat menyembunyikan file dan / atau folder yang tidak cocok*
.Untuk tujuan ini,
bash
sediakan pilihan untuk*
mencocokkan segalanya, bahkan objek tersembunyi:Ini dapat berguna untuk mengatur ulang
dotglob
ke keadaan default (tidak disetel), jika Anda terus menggunakan shell tempat Anda menjalankan perintah di atas:sumber
Buka terminal ( Ctrl+ Alt+ T) semut ketik ini:
Ini akan cocok dengan semua file dan direktori di dalam
somedir
dan anak-anaknya (grand-) termasuk file dot "tersembunyi" tetapi mengecualikansomedir
dirinya karena-mindepth 1
, kemudian-delete
mereka.sumber
Gunakan
xdev
opsi untuk menghapus file hanya dalam batas perangkat.sumber
-delete
. Ini menyiratkan-depth
dan lebih mudah diingat daripada-depth -exec rm -Rf {} \;
Untuk menghapus (dalam terminal) semua file dan subdirektori kecuali untuk direktori dasar bernama "jangan hapus":
sumber
Anda dapat menggunakan
find
dengan-delete
bendera:find dontDeleteMe/* -delete
Ini
/*
penting karenafind
hanya mencari DI DALAM folder yang disebut "dontDeleteMe".Juga memastikan bahwa
-delete
bendera ada di akhirfind
perintah.sumber
dotglob
. Kalau tidak, menggunakan-mindepth 1
opsi flag sepertinya satu-satunya cara untuk membuatnya berfungsi.Apa yang dikatakan:
Hapus semua file yang dimulai dengan. dalam "direktori" dan semua file lainnya juga.
Meskipun sebagaimana dicatat oleh Neftas , solusi ini tidak aman!
Solusi yang lebih aman adalah:
sumber
.
dan..
direktori. Hal ini dapat dihindari dengan mengubah{.*}
ke{.??*}
, tetapi kemudian Anda tidak akan menghapus file tersembunyi dengan hanya satu karakter, seperti.a
.Saya tidak yakin mengapa ini sangat kompleks, bantu saya jika saya salah
Itu dia
sumber
Bahkan ada jawaban yang lebih sederhana:
cd dontDeleteMe
rm -rf *
Waktu kuliah administrasi sistem dasar: Pastikan untuk memperhatikan di mana Anda berada saat Anda menggunakan perintah sweeping seperti ini.
Saya tidak bisa mengatakan itu dengan cukup. Saya harus memulihkan kotak karena seseorang tidak memperhatikan dan mengetik
rm -rf *
di /.* nix mengasumsikan bahwa jika Anda root atau jika Anda sedang men-root, Anda tahu apa yang Anda lakukan. Jadi pastikan Anda tahu apa yang Anda lakukan sebelum melakukannya.
Alternatif yang memastikan perintah 'cd' Anda berfungsi sebelum Anda mengeluarkan 'rm' adalah untuk digunakan
sumber
cd dontDeleteMe && rm -rf *
&&
Operator tidak hanya menyatukan perintah; itu mengharuskan setiap perintah untuk berhasil sebelum yang berikutnya akan dieksekusi. Jikacd
perintah gagal karena alasan apa pun (direktori tidak ada, hak istimewa, dll) makarm
perintah tidak akan dieksekusi. Saya akan menyebutnya lebih aman.sumber
rm -rf *
tetap berlari .akan menghapus direktori kerja saat ini
sumber