Mengatakan 'ya untuk semua' menggunakan rm -i

10

Katakanlah saya ingin memastikan saya menghapus file yang benar terlebih dahulu, jadi saya melakukan sesuatu seperti:

rm -i *

hanya untuk memastikan bahwa saya baik-baik saja dengan file yang saya hapus. Jadi ini akan meminta saya untuk setiap file. Setelah beberapa file, anggaplah saya menyadari bahwa itulah yang ingin saya hapus. Alih-alih CTRL+Cmelakukan dan hanya melakukan rm *, adakah cara saya bisa mengatakan Ya untuk semua ?

Pertanyaan ini datang lebih karena rasa ingin tahu daripada fungsionalitas.

Amit
sumber
Pertanyaan aneh, tapi bagaimanapun, mari kita kreatif dalam jawaban kita!
dolmen

Jawaban:

8

Tidak.

(Kecuali jika Anda menemukan cara untuk membalik bit 'interaktif' dengan debugger.)

pengguna1686
sumber
[rujukan?] :-)
Daniel Beck
6
@Daniel: coreutils/src/remove.c:335coreutils/lib/yesno.c:46(dihasilkan) → rpmatch(3): "mengembalikan 0 untuk respons negatif yang diakui (" tidak "), 1 untuk respons positif yang diakui (" ya "), dan -1 ketika nilai respons tidak dikenali"
user1686
Sangat bagus ditemukan!
Daniel Beck
3
Anda juga dapat menempelkan sejumlah besar [jeda baris] ke terminal, yang bukan "Ya untuk semua", tetapi hal yang sama terjadi.
Olli
haha benar untuk 'y [linebreak], aku suka itu! :)
Amit
9

Nah, ini tidak benar-benar menjawab pertanyaan Anda. Namun alih-alih menggunakan rm -i, pertimbangkan rmuntuk alias rm -I:

Halaman manual menyatakan:

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

di Anda ~/.bashrc, masukkan:

 alias rm='rm -I'

ini sebenarnya berguna!

Sebastian
sumber
4

Apakah ada cara saya bisa mengatakan Ya untuk semua?

Jawabannya adalah ya, menggunakan kode ini:

$ yes "yes" | rm -vRI directory

  • v: tampilkan daftar file yang telah dihapus
  • R: hapus direktori dan isinya secara rekursif
  • I: sesuai rekomendasi di atas.
Teocci
sumber
3

Cukup periksa dulu menggunakan ls *.blalalu rm -f *.blamungkin?

Gunakan dengan hati-hati!

Jonathan Ross
sumber
haha benar ini kemungkinan
Amit
3

Jika Anda menjalankan di layar (ide bagus secara umum), Anda dapat melakukan:

ctrl-a : exec .! yes y

Ini akan menyebabkan layar menjalankan perintah 'ya' dengan y sebagai output, dan mengarahkan output tersebut ke program yang sedang berjalan (rm -i).

Slartibartfast
sumber
2

Ini dapat dilakukan dengan mengganti deskriptor file aplikasi dengan cepat. Anda akan memerlukan file perantara.

Anda dapat menggunakan gdb dan pipa bernama seperti ini (dengan asumsi Anda menggunakan lebih banyak terminal, Anda harus menggunakan layar atau yang lainnya):

  • buat pipa bernama dengan "mkfifo myYesYesPipe"
  • mulai salinan interaktif dengan rm -i dan temukan PID-nya
  • buka gdb

Kemudian ketikkan perintah berikut di gdb, ganti PID

attach rmPID
call open("/path/to/myYesYesPipe",66,0666)
call dup2(3,0)
call close(3)
detach
quit

Ini menggantikan keyboard dengan pipa bernama untuk rm.

Sekarang Anda harus mengisi pipa yang disebutkan

  • jalankan yes> / path / ke / myYesYesPipe

rm akan membaca pipa dan menimpa segalanya.

David Costa
sumber
@ kegembiraan. Anda mengilhami saya untuk menggunakan debugger.
David Costa
1
  1. Letakkan rmproses di latar belakang dengan Ctrl+Z.
  2. Ingat perintah terakhir ( rm -i *perintah)
  3. Hapus -i
  4. Enter untuk menjalankan perintah
  5. fg %1
  6. Ctrl+C
dolmen
sumber
3
5s/fg/kill/; 6d
user1686
3
Bagaimana ini lebih baik daripada apa yang secara eksplisit disebutkan pengguna tidak ingin dia lakukan?
Daniel Beck