Comment annuler une commande rm?

9

Il y a beaucoup de questions sur la façon d' annuler une rm commande terminée . Dans mon cas, ma RM a commencé à demander: "Êtes-vous sûr de vouloir supprimer ce fichier?"

Et je dois confirmer pour chacun d'eux. Au lieu de confirmer manuellement "y / n":

  1. Puis-je définir "oui" pour le reste tout en étant invité à y / n pour le nième fichier? (équivalent à la case à cocher "Oui à tous" sous Windows) (je connais l' yes | rmastuce avant de commencer)

  2. Puis-je abandonner l'opération tout en demandant o / n pour le nième fichier? (sauf pour arrêter la machine :))

Andrejs
la source
10
Appuyez simplement sur ctrl-c et recommencez? Btw, avec -f, il ne devrait rien vous demander - c'est un peu l'intérêt de -f.
user253751
Vous avez raison, supprimé "-f" du titre de ma question.
Andrejs

Réponses:

19

Pour accomplir la requête 1, vous devrez utiliser un programme plus sophistiqué que yesd'envoyer yN nombre de fois, puis passer le clavier au-delà. Vous ne pouvez pas le faire avec rmsauf de toujours demander ( rm -i) ou de ne jamais demander ( rm -f).

Vous pouvez toujours avorter rmen

  • en appuyant sur Control-C pour l'interrompre (envoie SIGINT),
  • en appuyant sur Control-Z pour l'arrêter (envoie SIGSTOP) puis en le tuant,
  • envoyer un SIGTERM ( kill), ou
  • en lui envoyant un SIGKILL ( kill -9).

Cela n'annulera aucune opération de fichier rmdéjà effectuée, mais cela l'empêchera d'effectuer d'autres opérations de fichier. Si le rmprocessus demande actuellement une entrée utilisateur, il ne dissocie pas activement les fichiers, donc le tuer l'empêchera simplement de continuer.

casey
la source
Qu'en est-il yes | head -9 | rm...d'obtenir 9 (par exemple) oui?
Jeff Schaller
2
@JeffSchaller Cela arriverait au 9e y / n sans entrée mais vous ne seriez pas en mesure de répondre y / n au 10e.
casey
1
On pourrait utiliser { yes | head -n9; yes n; } | rm -i …pour supprimer les 9 premiers fichiers, puis répondre «non» pour tous les fichiers restants (et bien sûr, la { … }partie pourrait être étendue pour couvrir toute combinaison possible de nombres).
zrajm
4
... bien que je ne vois pas à quoi cela pourrait être utile. Si vous savez à quels fichiers vous souhaitez dissocier / non dissocier, pourquoi ne pas passer les bons arguments au rmlieu de créer des commandes tordues et peu fiables?
spectras
10

GNU rm prend en charge -i, ce qui, je suppose, est ce à quoi vous faites référence et demande une confirmation pour chaque fichier, mais aussi -I, ce qui est un peu différent:

-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

Quant à savoir s'il est possible d'arrêter une interaction avec rm après qu'elle a commencé, frapper Ctrl- Cdevrait le faire.

dhag
la source
2

avec Ctrl+ cvous pourrez annuler l'opération.

Mais si vous regardez dans votre .bashrcfichier, vous pouvez commenter l'alias qui force la confirmation, il utilise le -iparam comme dhag expiré.

en vous, .bashrcvous trouverez une entrée comme celle-ci:

alias rm='rm -i'

si vous le commentez, votre rm -ftestament fonctionne directement

lèse
la source
1

Sous bash, vous pouvez contourner un alias en ajoutant a \à la commande, afin

rm filename

devient

\rm filename
Andrew Henle
la source
2
Je ne vois pas comment cela a quelque chose à voir avec ma question de "comment interrompre le processus rm"
Andrejs
@AndreyDoronin Il aborde votre utilisation d'approches telles que je connais l' yes | rmastuce avant de commencer
Andrew Henle
@AndreyDoronin> il indique comment ne pas finir par devoir demander comment interrompre le processus rm pour les raisons que vous avez données dans votre question.
spectras