Hapus file tanpa bertanya

89

Bagaimana saya bisa menghapus file tanpa meminta pengguna jika dia setuju untuk menghapus file? Saya menulis skrip shell dan menggunakan fungsi rm, tetapi meminta "menghapus file biasa?" dan aku benar-benar tidak membutuhkan ini. Terima kasih.

Hei
sumber
5
rm -f, yes | rmdan seterusnya, tapi ini milik SU.
4
rmtidak menunjukkan "hapus file biasa?" meminta secara default. Anda harus memilikinya alias rm -i, atau didefinisikan sebagai fungsi. Saya terkejut bahwa alias terlihat di dalam skrip Anda. Apakah Anda menjalankan skrip ( ./foo.sh) atau sumbernya ( . foo.shatau source foo.sh)?
Keith Thompson

Jawaban:

103

Anda mungkin telah rmalias untuk rm -ijadi coba ini:

/bin/rm -f file.log

Untuk melihat alias Anda, Anda dapat menjalankan alias.

dikunyah
sumber
7
Atau, gunakan command rm ...atau \rm ...lewati alias / function
glenn jackman
6
Dikatakan bahwa memiliki rmalias rm -iadalah ide yang buruk. The rmperintah, secara default, diam-diam menghapus file bernama. Dengan mengalihkannya rm -i, Anda dapat terbiasa tidak memeriksa dengan cermat sebelum menekan Enter, tergantung pada prompt interaktif untuk menyelamatkan Anda. Kemudian Anda mengetik rm some-important-filesuatu lingkungan tanpa alias.
Keith Thompson
@Keith Itu sangat benar, saya hanya pribadi alias rm ke rm -v
chown
1
Jika "rm" adalah fungsi (bukan alias), jawaban ini seharusnya berfungsi. Dan unsetperintah bash mungkin menarik
Xen2050
56

Bendera gaya menghapus semua prompt;

rm -f {file}

lynks
sumber
2
Ini yang saya cari, bukan jawaban yang diterima.
gsamaras
30

Semoga kekuatan bersamamu - rm -f

manojlds
sumber
5
Saya sudah memutakhirkan jawaban lynks, dan ini persis sama. Hanya memilih rasa humor
rain_
Saya mengubah baik komentar DAN jawabannya hanya karena seseorang benar-benar menemukan rasa humor di SO ...
Mac
5

Di dalam skrip shell, Anda ingin menggunakan rm -f <filename>tetapi Anda juga memiliki opsi untuk menyingkirkan -iopsi implisit untuk lingkungan Anda dengan memasukkan unalias rmdalam shell Anda (atau profil).

Musannif Zahir
sumber
unalias rmtidak bekerja di CentOS? Amazon Linux?
Suncatcher
5

yang yesProgram berulang kali menjawab ya untuk semua petunjuknya. sehingga Anda dapat menyalurkannya ke rmprogram interaktif untuk mendapatkan efek yang diinginkan juga.

yes | rm <filename>

sebaliknya, jika Anda tidak ingin melakukan sesuatu yang interaktif, Anda bisa melakukannya

yes n | <something interactive>

dan itu akan mengulangi 'n' pada aliran input (secara efektif menjawab tidak untuk pertanyaan)

mholm815
sumber
The yes nopsi tidak bekerja untuk saya. Saat saya gunakan yes n | rm file.txt, itu benar-benar menghapus file meskipun file tersebut dilindungi dengan benar.
iammilind
5

Jika Anda memiliki izin yang diperlukan untuk menghapus file dan Anda tidak ingin diminta, lakukan hal berikut (-f = force):

rm -f file

Jika Anda tidak memiliki izin untuk file tersebut, Anda harus menggunakan:

sudo rm -f file
Kassym Dorsel
sumber
1
"Hapus file biasa?" prompt menyiratkan bahwa itu bukan masalah izin.
Keith Thompson
4
\rm file

Backslash mem- \bypass alias.

teknopaul
sumber
1
"\" adalah garis miring terbalik, yang Anda maksud?
Cand3r
Ya, untuk menggunakan rm tanpa alias yang menghasilkan awalan dialog konfirmasi yang tidak diinginkan dengan \.
teknopaul
1

Selain menggunakan -fparameter, Anda juga dapat menggunakan findperintah, misalnya

find -name file.log -delete
kenorb
sumber
0

Saat ini saya sedang bekerja di suatu sistem, di mana bash shell menerima definisi perintah rm sebagai fungsi di salah satu file konfigurasi global:

 rm  () { /bin/rm -i ${1+"$@"}; }

Karenanya, tidak ada jawaban di atas mengenai alias yang berhasil. Untuk mengatasi perilaku menjengkelkan, saya membatalkan fungsi rm di file .bashrc saya

 unset -f rm

Saya memiliki masalah yang sama dengan pembuka. Namun saya tidak menemukan jawaban yang menyebutkan kemungkinan yang rmdisembunyikan oleh fungsi shell. Jadi saya menambahkan jawabannya di sini dengan harapan akan membantu seseorang yang menghadapi masalah yang sama.

Mengetik /bin/rmatau rm -fsepanjang waktu tidak nyaman, dan mungkin memiliki konsekuensi buruk (dalam kasus rm -f).

daw
sumber
Itu mungkin telah memecahkan masalah Anda tetapi tidak menjawab pertanyaan.
tersangka
Tidakkah jawaban yang dipilih - menelepon /bin/rmberfungsi? Jika saya memiliki fungsi dalam bash, dan file yang dapat dieksekusi dengan nama yang sama di direktori saat ini, hanya menambahkan ./di depan nama akan memanggil file - bukan fungsi. PS - Saya menambahkan komentar ke jawaban yang dipilih tentang fungsi &unset
Xen2050
Ya, /bin/rmberhasil. Melakukan unsetpenghapusan menghilangkan kebutuhan untuk mengetik path lengkap.
daw
0

Jika Anda rmalias rm -i, gunakan unalias rm;

Jangan gunakan rm -fsecara langsung kecuali Anda benar-benar ingin menghapus banyak file yang dilindungi tulis. Pasti ada alasan yang sangat bagus untuk digunakan -f.

Namun, jika Anda memiliki banyak file yang dilindungi penulisan, Anda mungkin lebih suka rsync -r --delete empty/ removed_dir/untuk kecepatan yang lebih cepat.

Zhu Jinxuan
sumber
0

Cara favorit saya untuk melakukan ini adalah cukup menggunakan commandperintah di bash, sama seperti cara Anda menggunakannya sudo. Ini akan menjalankan perintah Anda tanpa alias, sama seperti menjalankannya /bin/rm(mungkin rmalias rm -i).

Contoh:

command rm -f /tmp/file.txt
PatrykMilewski
sumber
0
rm -Rf <folder-to-be-deleted>

-R: Rekursif f: force, no prompt

mdivk
sumber