Сказати "так всім", використовуючи rm -i


10

Скажіть, я хотів переконатися, що я видаляю потрібні файли спочатку, тому я зробив щось на кшталт:

rm -i *

щоб переконатися, що я добре з файлами, які я видаляю. Отже, це запитає мене для кожного файлу. Припустимо, після кількох файлів я зрозумів, що це саме те, що я хотів видалити. Замість того, CTRL+Cщоб робити і просто робити rm *, чи є спосіб, який я можу просто сказати " Так" усім ?

Це питання швидше викликає цікавість, а не функціональність.


Дивне питання, але все одно, будьмо креативними у своїх відповідях!
долмен

Відповіді:


8

Ні.

(Якщо ви не знайдете спосіб перевернути «інтерактивний» біт за допомогою налагоджувача.)


[потрібна цитата] :-)
Даніель Бек

6
@Daniel: coreutils/src/remove.c:335coreutils/lib/yesno.c:46(згенеровано) → rpmatch(3): "повертає 0 за розпізнану негативну відповідь (" ні "), 1 за визнану позитивну відповідь (" так ") та -1, коли значення відповіді не розпізнається"
користувач1686

Дуже приємна знахідка!
Даніель Бек

3
Крім того, ви можете просто вставити велику кількість y [розрив рядка] до терміналу, що не є "Так для всіх", але відбувається те саме.
Оллі

ха-ха, правда для речі "y [linebreak]", мені це подобається! :)
Аміт

9

Ну, це насправді не відповідає на ваше запитання. Але замість того , щоб використовувати rm -i, розгляне накладення rmна rm -I:

На сторінці чоловіка зазначено:

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

у своєму ~/.bashrc, покладіть:

 alias rm='rm -I'

це насправді корисно!


4

Чи є спосіб я просто сказати "Так" всім?

Відповідь "так", використовуючи цей код:

$ yes "yes" | rm -vRI directory

  • v: показати список видалених файлів
  • R: видаляти каталоги та їх вміст рекурсивно
  • Я: згідно рекомендації, наведеної вище.

3

Просто перевірте спочатку використання, ls *.blaа потім rm -f *.blaможливо?

Будьте обережні!


ха-правда, така можливість
Аміт

3

Якщо ви працюєте на екрані (гарна ідея взагалі), ви можете зробити:

ctrl-a : exec .! yes y

Це призведе до того, що екран запустить команду "так", при цьому y - вихід, і направить цей вихід на запущену програму (rm -i).


2

Це можна зробити, замінивши дескриптори файлів додатків на льоту. Вам знадобиться проміжний файл.

Ви можете використовувати gdb та іменовану трубку на кшталт цього (якщо ви використовуєте більше терміналів, інакше вам доведеться використовувати екран або щось інше):

  • створити названу трубу за допомогою "mkfifo myYesYesPipe"
  • запустіть інтерактивну копію з rm -i та знайдіть її PID
  • відкритий gdb

Потім введіть наступні команди в gdb, замінивши PID

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

Це замінює клавіатуру названою трубою для rm.

Тепер ви повинні заповнити названу трубу

  • запустіть так> / шлях / до / myYesYesPipe

rm прочитає трубу і перезапише все.


@grawity. ти надихнув мене використовувати налагоджувач.
Девід Коста-

1
  1. Покладіть rmпроцес на другий план за допомогою Ctrl+Z.
  2. Згадайте останню команду ( rm -i *команду)
  3. Видаліть -i
  4. Enter запустити команду
  5. fg %1
  6. Ctrl+C

3
5s/fg/kill/; 6d
користувач1686

3
Як це краще, ніж те, що користувач прямо вказав, що не хоче робити?
Даніель Бек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.