Akan rm -rf *
menghapus semua file / folder di direktori saat ini? Saya ingin memastikan wildcard *
tidak akan naik di direktori atas dan menghapus semua sistem file saya. : D
Saya ingat melakukan chmod 777 .* -R
untuk chmod
menyembunyikan file dan itu memperbaiki chmod
semua sistem file saya. Jelas, saya berada di akun root.
rm -rf ./*
dan secara eksplisit menentukan direktori saat ini ... tetapi Ankur tampaknya mengatakan itu tidak masalah.Jawaban:
Tidak, jika Anda tidak banyak mengubah shell Anda, ini tidak akan menghapus file atau direktori yang dimulai dengan a
.
. Untuk menghapusnya, Anda juga bisa mencantumkannya secara eksplisitatau gunakan pola glob yang tepat (terima kasih Chris)
EDIT Intinya di sini adalah bahwa Anda tidak dapat menggunakan
.*
untuk mencocokkan file seperti.file
, karena.*
atau.*?
juga akan cocok..
atau.
..[^.]*
cocok dengan file suka.file
, sementara..?*
cocok file suka..foo
(*
cocok dengan nol atau lebih karakter sementara?
sama persis dengan satu).sumber
..?*
untuk menangkap entri yang dimulai dengan “..” (mis..foo
.).rm
. jadi, menghapus isi direktori dengan * bukan cara yang paling bijak, imho.xargs
sedikit di luar cakupan pertanyaan ini. Orang bisa misalnya mulai berpikir tentang hal itu ketika shell mengeluh daftar argumen.Jika Anda ingin menghapus direktori dan semua isinya, Anda dapat
chdir
masuk ke direktori induk danrm -rf
direktori tersebut dengan nama, melewati seluruh pertanyaan globbing. Jika Anda ingin menghapus konten tetapi menyimpan direktori, termudah untuk menghapus semua dan kemudian membuat ulang direktori.Sangat kompleks untuk menghasilkan glob yang akan cocok dengan semua entri direktori yang mungkin disimpan. dan ..; mudah untuk menghasilkan jawaban sederhana (mis.,
* .??*
) yang akan bekerja hampir selalu dalam praktik. Ini OK untuk penggunaan interaktif, karena mudah diingat dan waktu tidak berfungsi dapat ditangkap dengan post-rmls -a
. Untuk skrip, lebih mudah melakukan hapus semua dan buat ulang direktori kosong.sumber
Karena saya pikir pertanyaan ini lebih tentang apa yang * * lakukan (dan bukan rm), mari kita coba pendekatan lain.
Jika Anda tidak yakin apa yang * dilakukan, Anda dapat "menguji" terlebih dahulu menggunakan perintah yang tidak berbahaya seperti gema. Sebelum Anda menjalankan ini, coba tebak apa yang akan mereka tunjukkan jika Anda menjalankannya di direktori home Anda.
Tapi pertama-tama mari kita membuat taman bermain sehingga kita bisa bermain dengan bintang-bintang dan melihat apa yang kita hasilkan.
Sekarang di dir ini kita punya ini:
Sekarang perhatikan apa yang * diperluas untuk menggunakan perintah gema:
Jadi mari kita lihat apa yang terjadi dengan perintah rm
Seperti yang Anda lihat dia hanya menghapus file2, karena * hanya diperluas ke file2. Jika Anda mengetikkan rm -rf. * Itu akan sama dengan menulis
Dan jujur, itu tidak terlihat menyenangkan;)
Semoga ini memperjelas * bagian dari pertanyaan Anda.
Pembaruan: Namun seperti yang ditunjukkan Ankur Goel, ada semacam perlindungan yang dibangun ke rm (jenis yang tidak biasa untuk perintah shell :)
Mari buat taman bermain baru:
Jadi sekarang kita memiliki ini lagi, tetapi dengan test1 dimiliki oleh root sebagai perlindungan jika rm mulai mengamuk.
Jadi mari kita hapus semuanya:
Dan sepertinya rm tidak menghapus. dan .. bahkan jika kita menyuruhnya !!!
Jadi setelah jawaban yang panjang ini ternyata aman untuk menghapus semuanya dalam dir dengan ini:
Tapi saya akan menggunakan ini dengan hati-hati, karena saya tidak yakin semua implementasi rm berperilaku seperti ini!
sumber
Iya nih. rm -rf hanya akan menghapus file dan folder di direktori saat ini, dan tidak akan naik ke pohon file. rm juga tidak akan mengikuti symlink dan menghapus file yang mereka tuju, jadi Anda tidak sengaja memangkas bagian lain dari sistem file Anda.
sumber
Jika Anda tidak ingin naik satu tingkat seperti yang dikatakan mpez0 dan
rm -rf
folder khusus ini, ada cara untuk bekerja pada semua direktori / file kecuali.
dan..
di folder saat ini dengan melakukan:Tentu saja, jika ada direktori / file yang berisi salah satu karakter dalam
IFS
variabel khusus shell (mis. Spasi, tab, baris baru), Anda mungkin ingin mengubah IFS terlebih dahulu, jalankan perintah, lalu kembalikan IFS.sumber
Cara yang lebih mudah untuk mengosongkan seluruh folder, juga menghindari masalah "terlalu banyak argumen" yang dibahas dalam jawaban ini , adalah dengan hanya menghapus dan membuat ulang direktori itu sendiri. Untuk memastikan ini berfungsi dengan benar ketika Anda berada di direktori yang terhubung, gunakan baris berikut:
(Jika Anda menggunakan
yourdir
alih-alih,$(readlink -f yourdir)
Anda hanya akan mengganti tautan sementara lokasi asli tetap penuh)sumber
xargs
...