Как отменить команду 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процесс в настоящее время запрашивает ввод данных пользователем, он не деинсталлирует какие-либо файлы, поэтому его уничтожение просто препятствует его продолжению.

Casey
источник
Как насчет 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следует сделать это.

dhag
источник
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 по причинам, которые вы указали в своем вопросе.
спектры