¿Cómo cancelar un comando rm?

9

Hay muchas preguntas sobre cómo deshacer un rm comando terminado . En mi caso, mi empresa comenzó a preguntar: "¿Está seguro de que desea eliminar este archivo?"

Y necesito confirmar para cada uno de ellos. En lugar de confirmar manualmente "y / n":

  1. ¿Puedo establecer "sí" en el resto mientras se me pide y / n para el enésimo archivo? (equivalente a la casilla de verificación "Sí a todo" en Windows) (Conozco el yes | rmtruco antes de comenzar)

  2. ¿Puedo cancelar la operación mientras se me pide y / n para el enésimo archivo? (excepto para apagar la máquina :))

Andrejs
fuente
10
Solo presiona ctrl-c y comienza de nuevo? Por cierto, con -f no debería preguntarte nada, ese es el punto de -f.
user253751
Tiene razón, eliminó "-f" del título de mi pregunta.
Andrejs

Respuestas:

19

Para cumplir con la solicitud 1, necesitará usar un programa más sofisticado que yesenviar yN número de veces y luego pasar la entrada del teclado más allá de eso. No puede hacerlo rmexcepto para preguntar siempre ( rm -i) o nunca preguntar ( rm -f).

Siempre puedes abortar rmpor

  • presionando Control-C para interrumpirlo (envía SIGINT),
  • presionando Control-Z para detenerlo (envía SIGSTOP) y luego matándolo,
  • enviando un SIGTERM ( kill), o
  • enviándole un SIGKILL ( kill -9).

Esto no deshacerá ninguna operación de archivo que rmya haya realizado, pero evitará que realice más operaciones de archivo. Si el rmproceso actualmente está solicitando la entrada del usuario, no está desvinculando activamente ningún archivo, por lo que eliminarlo simplemente evitará que continúe.

casey
fuente
¿Qué hay yes | head -9 | rm...de obtener 9 (por ejemplo) sí?
Jeff Schaller
2
@JeffSchaller Eso llegaría al noveno y / n sin entrada, pero no podría responder y / n al décimo.
casey
1
Se podría usar { yes | head -n9; yes n; } | rm -i …para eliminar los primeros 9 archivos, luego responder "no" para los archivos restantes (y, por supuesto, la { … }parte se podría expandir para cubrir cualquier combinación posible de números).
zrajm
44
... aunque no veo para qué podría ser útil. Si sabe a qué archivos desea que no les guste o que no estén vinculados, ¿por qué no pasar los argumentos correctos en rmlugar de crear comandos retorcidos y poco confiables?
espectras
10

GNU rm admite -i, que supongo es a lo que se refiere y pide confirmación para cada archivo, pero también -I, que es un poco diferente:

-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

En cuanto a si es posible detener una interacción con rm después de que haya comenzado, Golpear Ctrl- Cdebe hacerlo.

dhag
fuente
2

con Ctrl+ cpodrás cancelar la operación.

Pero si mira en su .bashrcarchivo, puede comentar el alias que fuerza la confirmación, usa el -iparámetro como dhag expandido.

en ti .bashrcencontrarás una entrada como esta:

alias rm='rm -i'

si lo comentas, tu rm -ftestamento funciona directamente

lese
fuente
1

Debajo bash, puede omitir un alias anteponiendo \a al comando, por lo que

rm filename

se convierte

\rm filename
Andrew Henle
fuente
2
No veo cómo esto tiene algo que ver con mi pregunta de "cómo interrumpir el proceso de gestión"
Andrejs
@AndreyDoronin Aborda su uso de enfoques como sé el yes | rmtruco antes de comenzar
Andrew Henle
@AndreyDoronin> dice cómo no terminar teniendo que preguntar cómo interrumpir el proceso de rm por las razones que dio en su pregunta.
espectros