Сказать «да всем» используя rm -i

10

Скажем, я хотел убедиться, что я сначала удаляю нужные файлы, поэтому я сделал что-то вроде:

rm -i *

просто чтобы убедиться, что я в порядке с файлами, которые я удаляю. Так что это попросит меня для каждого файла. После нескольких файлов, я понимаю, что это именно то, что я хотел удалить. Вместо того, чтобы CTRL+Cпросто думать и делать rm *, могу ли я просто сказать « да» всем ?

Этот вопрос больше связан с любопытством, чем с функциональностью.

Amit
источник
Странный вопрос, но в любом случае давайте будем креативны в наших ответах!
дольмен

Ответы:

8

Нет.

(Если вы не найдете способ перевернуть «интерактивный» бит с помощью отладчика.)

user1686
источник
[нужная цитата] :-)
Даниэль Бек
6
@Daniel: coreutils/src/remove.c:335coreutils/lib/yesno.c:46(генерируется) → rpmatch(3): «возвращает 0 для распознанного отрицательного ответа (« нет »), 1 для распознанного положительного ответа (« да ») и -1, если значение ответа не распознано»
user1686
Очень хорошая находка!
Даниэль Бек
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: рекурсивно удалять каталоги и их содержимое
  • Я: согласно рекомендации выше.
Teocci
источник
3

Просто проверьте сначала с помощью, ls *.blaа затем, rm -f *.blaможет быть?

Будьте осторожны!

Джонатан Росс
источник
Хаха, правда, это возможно
Амит
3

Если вы работаете на экране (хорошая идея в целом), вы можете сделать:

ctrl-a : exec .! yes y

Это заставит screen выполнить команду «yes», где y будет выводом, и направить указанный вывод в работающую программу (rm -i).

Слартибартфаст
источник
2

Это можно сделать, заменив дескрипторы файлов приложения на лету. Вам понадобится промежуточный файл, хотя.

Вы можете использовать gdb и именованный канал следующим образом (при условии, что вы используете больше терминалов, в противном случае вам придется использовать screen или что-то еще):

  • создать именованный канал с помощью "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
user1686
3
Как это лучше, чем то, что пользователь явно упомянул, что он не хочет делать?
Даниэль Бек