Como cancelar um comando rm?

9

Há muitas perguntas sobre como desfazer um rm comando finalizado . No meu caso, minha empresa começou a perguntar: "Tem certeza de que deseja excluir este arquivo?"

E preciso confirmar para cada um deles. Em vez de confirmar manualmente "y / n":

  1. Posso definir "yes" para o restante enquanto me solicitam y / n para o enésimo arquivo? (equivalente à caixa de seleção "Sim para todos" no Windows) (conheço o yes | rmtruque antes de iniciar)

  2. Posso interromper a operação enquanto estou solicitando y / n para o enésimo arquivo? (exceto para desligar a máquina :))

Andrejs
fonte
10
Basta pressionar ctrl-c e iniciá-lo novamente? Aliás, com -f não deve perguntar nada - esse é o objetivo de -f.
precisa saber é o seguinte
Você está certo, removeu "-f" do título da minha pergunta.
Andrejs

Respostas:

19

Para realizar a solicitação 1, você precisará usar um programa mais sofisticado do yesque enviar yN vezes e depois passar a entrada do teclado além disso. Você não pode fazer isso com rmexceção de sempre perguntar ( rm -i) ou nunca perguntar ( rm -f).

Você sempre pode abortar rmpor

  • pressionando Control-C para interrompê-lo (envia SIGINT),
  • pressionando Control-Z para pará-lo (envia SIGSTOP) e depois matando-o,
  • enviando um SIGTERM ( kill) ou
  • enviando um SIGKILL ( kill -9).

Isso não desfará nenhuma operação de arquivo rmque já tenha sido executada, mas impedirá a execução de outras operações de arquivo. Se o rmprocesso estiver solicitando a entrada do usuário no momento, ele não está desvinculando ativamente nenhum arquivo, portanto, matá-lo simplesmente impedirá que continue.

Casey
fonte
Que tal yes | head -9 | rm...obter 9 (por exemplo) sim?
Jeff Schaller
2
@JeffSchaller Isso chegaria ao 9º ano sem entrada, mas você não seria capaz de responder até o 10º.
Casey #
1
Pode-se usar { yes | head -n9; yes n; } | rm -i …para excluir os primeiros 9 arquivos e depois responder "não" para os arquivos restantes (e, é claro, a { … }peça pode ser expandida para cobrir qualquer combinação possível de números).
Zrajm
4
... embora não veja para que possa ser útil. Se você sabe quais arquivos deseja desassistir / não desvincular, por que não passar os argumentos corretos para em rmvez de criar comandos distorcidos e não confiáveis?
espectros
10

O GNU rm suporta -i, que eu assumo é o que você está se referindo e pede confirmação para cada arquivo, mas também -I, que é um pouco 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

Se é possível interromper uma interação com a rm após o início, pressione Ctrl- Cdeve fazê-lo.

dhag
fonte
2

com Ctrl+ cvocê poderá cancelar a operação.

Mas se você procurar no seu .bashrcarquivo, poderá comentar o alias que força a confirmação, ele usa o -iparâmetro como dhag esperado.

em você .bashrcvocê encontrará uma entrada como esta:

alias rm='rm -i'

se você comentar, sua rm -fvontade funcionará diretamente

lese
fonte
1

Em bash, você pode ignorar um alias acrescentando \a ao comando, para

rm filename

torna-se

\rm filename
Andrew Henle
fonte
2
Eu não vejo como isso tem algo a ver com a minha pergunta de "como interromper o processo de rm"
Andrejs
@AndreyDoronin Ele aborda o uso de abordagens como eu sei o yes | rmtruque antes de iniciar
Andrew Henle
@AndreyDoronin> diz como não acabar tendo que perguntar como interromper o processo rm pelos motivos que você deu na sua pergunta.
spectras