Bagaimana cara membatalkan perintah rm?

9

Ada banyak pertanyaan tentang cara membatalkan rm perintah yang sudah selesai . Dalam kasus saya, rm saya mulai bertanya: "Apakah Anda yakin ingin menghapus file ini?"

Dan saya perlu mengkonfirmasi untuk masing-masing dari mereka. Alih-alih secara manual mengkonfirmasi "y / n":

  1. Bisakah saya menetapkan "ya" ke yang lain saat diminta untuk memilih file ke-n? (setara dengan kotak centang "Ya untuk Semua" pada Windows) (Saya tahu yes | rmtriknya sebelum memulai)

  2. Bisakah saya batalkan operasi sambil dimintai file ke-n? (kecuali untuk mematikan mesin :))

Andrejs
sumber
10
Tekan saja ctrl-c dan mulai lagi? Btw, dengan -f seharusnya tidak menanyakan apa-apa - itu adalah inti dari -f.
user253751
Anda benar, dihapus "-f" dari judul pertanyaan saya.
Andrejs

Jawaban:

19

Untuk memenuhi permintaan 1, Anda harus menggunakan program yang lebih canggih daripada yesmengirim yN beberapa kali dan kemudian mengirimkan input keyboard lebih dari itu. Anda tidak dapat melakukannya dengan rmkecuali untuk selalu bertanya ( rm -i) atau untuk tidak pernah bertanya ( rm -f).

Anda dapat selalu batalkan rmoleh

  • menekan Control-C untuk menghentikannya (mengirim SIGINT),
  • menekan Control-Z untuk menghentikannya (mengirim SIGSTOP) dan kemudian membunuhnya,
  • mengirim SIGTERM ( kill), atau
  • mengirimkannya SIGKILL ( kill -9).

Ini tidak akan membatalkan operasi file yang rmsudah dilakukan, tetapi mereka akan mencegahnya melakukan operasi file lebih lanjut. Jika rmproses saat ini meminta input pengguna, itu tidak secara aktif memutuskan tautan file apa pun sehingga mematikannya hanya akan mencegahnya dari melanjutkan.

casey
sumber
Bagaimana kalau yes | head -9 | rm...mendapat 9 (misalnya) ya?
Jeff Schaller
2
@ JeffSchaller Itu akan sampai ke 9 y / n tanpa input tetapi Anda tidak akan bisa menjawab y / n ke 10.
Casey
1
Satu dapat digunakan { yes | head -n9; yes n; } | rm -i …untuk menghapus 9 file pertama, kemudian menjawab, "tidak" untuk file yang tersisa (dan tentu saja { … }bagian dapat diperluas untuk mencakup kemungkinan kombinasi angka).
zrajm
4
... meskipun saya tidak melihat apa manfaatnya. Jika Anda tahu file mana yang Anda inginkan tidak disukai / tidak terputus, mengapa tidak meneruskan argumen yang benar rmdaripada membangun perintah yang bengkok dan tidak dapat diandalkan?
spektrum
10

GNU rm mendukung -i, yang saya asumsikan adalah apa yang Anda maksud dan meminta konfirmasi untuk setiap file, tetapi juga -I, yang sedikit berbeda:

-I     prompt once before removing  more  than  three  files,  or  when
       removing  recursively.  Less intrusive than -i, while still giv‐
       ing protection against most mistakes

Seperti apakah mungkin untuk menghentikan interaksi dengan rm setelah dimulai, memukul Ctrl- Charus melakukannya.

Dhag
sumber
2

dengan Ctrl+ cAnda akan dapat membatalkan operasi.

Tetapi jika Anda melihat dalam .bashrcfile Anda, Anda dapat mengomentari alias yang memaksa konfirmasi, itu menggunakan -iparam seperti yang dikeluarkan dhag.

di dalam kamu, .bashrckamu akan menemukan entri seperti ini:

alias rm='rm -i'

jika Anda berkomentar, surat rm -fwasiat Anda akan langsung berfungsi

ini
sumber
1

Di bawah bash, Anda dapat mem-bypass alias dengan menambahkan sebuah \ke perintah, jadi

rm filename

menjadi

\rm filename
Andrew Henle
sumber
2
Saya tidak melihat bagaimana ini ada hubungannya dengan pertanyaan saya tentang "bagaimana mengganggu proses rm"
Andrejs
@AndreyDoronin Ini membahas penggunaan pendekatan Anda seperti saya tahu yes | rmtriknya sebelum memulai
Andrew Henle
@AndreyDoronin> ia memberi tahu bagaimana untuk tidak akhirnya harus bertanya bagaimana cara mengganggu proses rm karena alasan yang Anda berikan dalam pertanyaan Anda.
spektrum