Rm -i kullanarak 'herkese evet' demek


10

Önce doğru dosyaları kaldırdığımdan emin olmak istedim, bu yüzden şöyle bir şey yaptım:

rm -i *

kaldırdığım dosyalar için uygun olduğumdan emin olmak için. Bu yüzden her dosya için benden isteyecek. Birkaç dosyadan sonra, kaldırmak istediğim şeyin tam olarak farkında olduğumu varsayalım. CTRL+CIng ve sadece yapmak yerine rm *, herkese Evet diyebilmemin bir yolu var mı?

Bu soru işlevsellikten ziyade meraktan kaynaklanmaktadır.


Garip bir soru, ama her neyse, cevaplarımızda yaratıcı olalım!
dolmen

Yanıtlar:


8

Hayır.

(Bir hata ayıklayıcı ile 'etkileşimli' biti çevirmenin bir yolunu bulamadığınız sürece.)


[alıntı gerekli] :-)
Daniel Beck

6
@Daniel: coreutils/src/remove.c:335coreutils/lib/yesno.c:46(oluşturuldu) → rpmatch(3): "tanınan bir negatif yanıt için 0 (" hayır "), tanınan bir pozitif yanıt için 1 (" evet ") ve yanıt değeri tanınmadığında -1
döndürür

Çok güzel bulmak!
Daniel Beck

3
Ayrıca, terminale çok sayıda y [satır sonu] yapıştırabilirsiniz, bu "herkese evet" değildir, ancak aynı şey gerçekleşir.
Olli

haha 'y [linebreak]' için doğru, hoşuma gitti! :)
Amit

9

Bu, sorunuza gerçekten cevap vermiyor. Ama kullanmak yerine rm -i, aliasing dikkate rmiçin rm -I:

Kılavuz sayfasında şunlar bulunur:

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

Gözlerinde farklı ~/.bashrc, koyun:

 alias rm='rm -I'

bu gerçekten faydalı!


4

Herkese Evet dememin bir yolu var mı?

Cevap evet, bu kodu kullanarak:

$ yes "yes" | rm -vRI directory

  • v: kaldırılan dosyaların listesini göster
  • R: dizinleri ve içeriklerini özyinelemeli olarak kaldırma
  • I: yukarıdaki tavsiyeye göre.

3

Sadece kullanarak ls *.blave sonra rm -f *.blabelki kontrol edin ?

Dikkatli olun!


haha doğru bu bir olasılık
Amit

3

Ekranda koşuyorsanız (genel olarak iyi bir fikir), şunları yapabilirsiniz:

ctrl-a : exec .! yes y

Bu, ekranın 'yes' komutunu y çıktı olacak şekilde çalıştırmasına neden olur ve adı geçen çıktıyı çalışan programa (rm -i) yönlendirir.


2

Bu, uygulama dosyası tanımlayıcılarını anında değiştirerek yapılabilir. Yine de bir ara dosyaya ihtiyacınız olacak.

Gdb ve bunun gibi adlandırılmış bir boru kullanabilirsiniz (daha fazla terminal kullandığınızı varsayarsak, ekran veya başka bir şey kullanmanız gerekir):

  • "mkfifo myYesYesPipe" ile adlandırılmış bir kanal oluştur
  • etkileşimli kopyayı rm -i ile başlatın ve PID'sini bulun
  • gdb'yi aç

Ardından, GID'ye PID yerine aşağıdaki komutları yazın

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

Bu, klavyeyi rm için adlandırılmış bir kanalla değiştirir.

Şimdi adlandırılmış boruyu doldurmanız gerekiyor

  • yes> / path / to / myYesYesPipe komutunu çalıştırın

rm boruyu okuyacak ve her şeyin üzerine yazacaktır.


@grawity. hata ayıklayıcıyı kullanmam için bana ilham verdin.
David Costa

1
  1. rmSüreci ile arka plana koyun Ctrl+Z.
  2. Son komutu geri çağırma ( rm -i *komut)
  3. Kaldır -i
  4. Enter komutu çalıştırmak
  5. fg %1
  6. Ctrl+C

3
5s/fg/kill/; 6d
Kullanıcı1686

3
Bu, kullanıcının açıkça yapmak istemediği şeyden daha iyi nasıl olur?
Daniel Beck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.