Как отменить команду rm?


9

Есть много вопросов о том, как отменить законченную rm команду. В моем случае мой rm начал спрашивать: «Вы уверены, что хотите удалить этот файл?»

И мне нужно подтвердить для каждого из них. Вместо ручного подтверждения «да / нет»:

  1. Могу ли я установить «да» на остаток при запросе y / n для n-го файла? (эквивалентно флажку «Да для всех» в Windows) (я знаю yes | rmхитрость перед запуском)

  2. Могу ли я прервать операцию при запросе y / n для n-го файла? (кроме выключения машины :))


10
Просто нажмите Ctrl-C и запустите его снова? Кстати, с -f это не должно вас спрашивать - вот в чем смысл -f.
user253751

Вы правы, убрали "-f" из заголовка моего вопроса.
Андрейс

Ответы:


19

Для выполнения запроса 1 вам нужно будет использовать более сложную программу, чем yesотправлять yN раз, а затем пропустить ввод с клавиатуры. Вы не можете сделать это, rmкроме как всегда спрашивать ( rm -i) или никогда не спрашивать ( rm -f).

Вы всегда можете прерывания rmпо

  • нажав Control-C, чтобы прервать его (отправляет SIGINT),
  • нажав Control-Z, чтобы остановить его (отправляет SIGSTOP), а затем убить его,
  • отправка SIGTERM ( kill) или
  • отправив SIGKILL ( kill -9).

Это не отменит файловые операции, rmкоторые уже были выполнены, но предотвратит дальнейшие файловые операции. Если rmпроцесс в настоящее время запрашивает ввод данных пользователем, он не деинсталлирует какие-либо файлы, поэтому его уничтожение просто препятствует его продолжению.


Как насчет yes | head -9 | rm...9 (например) да?
Джефф Шаллер

2
@JeffSchaller Это дойдет до 9-го года без ввода, но вы не сможете ответить д / н до 10-го.
Кейси

1
Можно использовать, { yes | head -n9; yes n; } | rm -i …чтобы удалить первые 9 файлов, а затем ответить «нет» для любых оставшихся файлов (и, конечно, { … }часть может быть расширена для охвата любой возможной комбинации чисел).
Зрайм

4
... хотя я не понимаю, для чего это может быть полезно. Если вы знаете, какие файлы вам не нравятся / не связаны, почему бы не передать правильные аргументы rmвместо создания искаженных, ненадежных команд?
спектры

10

GNU rm поддерживает -i, что, как я полагаю, это то, на что вы ссылаетесь и запрашивает подтверждение для каждого файла, но также -I, что немного отличается:

-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

Что касается того, возможно ли остановить взаимодействие с rm после того, как оно началось, нажав Ctrl- Cследует сделать это.


2

с помощью Ctrl+ cвы сможете отменить операцию.

Но если вы заглянете в свой .bashrcфайл, вы можете прокомментировать псевдоним, который -iвызывает подтверждение, он использует параметр как exphaed dhag.

в тебе .bashrcты найдешь такую ​​запись:

alias rm='rm -i'

если вы это прокомментируете, ваша rm -fволя работает напрямую


1

Под bashпсевдонимом вы можете обойти псевдоним, добавив \к команде

rm filename

становится

\rm filename

2
Я не понимаю, как это как-то связано с моим вопросом «как прервать процесс rm»
Andrejs

@AndreyDoronin Это касается вашего использования подходов, таких как я знаю yes | rmхитрость перед началом
Эндрю Хенле

@AndreyDoronin> это говорит о том, как не нужно спрашивать, как прервать процесс rm по причинам, которые вы указали в своем вопросе.
спектры
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.