verifique novamente a remoção em um curinga

1

Eu apenas fiz um estúpido e acidentalmente removi um monte de arquivos que eu não deveria. Tendo aceito meu destino, gostaria de implementar algum tipo de rede de segurança no futuro para proteger meus arquivos de minha palhaçada absoluta.

Eu esperava que, sempre que eu digitasse rm * no terminal, ele me perguntasse se tenho certeza de que quero excluir todos os arquivos. Alguma dica?

    
por Ryan Schubert 12.11.2018 / 19:14

4 respostas

2

Digitando

rm *

deve, por si só, disparar os alarmes. Este é um comando perfeitamente legal para querer executar de tempos em tempos, mas antes de fazer isso, você deve verificar se está no diretório correto (talvez tornar o diretório atual parte do seu prompt?), Que * corresponderá os nomes de arquivos dos arquivos que você deseja remover (você pode verificar isso com echo * ), etc. etc.

Existe uma opção -i para rm que você poderia usar, o que solicitaria confirmação antes de remover um arquivo. A criação de um alias para rm to rm -i provou, ao longo do tempo, que as pessoas começarão a confiar nesta opção para detectar erros estúpidos, o que levaria a surpresas desagradáveis em situações em que o alias não é definido. Portanto, seria melhor desenvolver um hábito de pensar antes de pressionar Enter , especialmente ao executar coisas que excluem arquivos (ou sobrescrevem arquivos ou truncam arquivos).

Ou isso, ou (e!) manter backups de hora em hora prontamente disponíveis de tudo que você não quer perder. Eu recomendo restic ou borgbackup para backups fora do site.

    
por 12.11.2018 / 19:27
1

Adquira o hábito de usar 'rm -i'. Evite usar um open * a menos que seja necessário.

    
por 12.11.2018 / 19:20
1

Se estiver usando o shell tcsh , você pode definir a variável rmstar para isso:

tcsh> set rmstar
tcsh> touch file
tcsh> rm *
Do you really want to delete all files? [N/y]

Isso, no entanto, não se aplica a

tcsh> rm ./*
tcsh>

Que pena, pois rm ./* é realmente o que você deve fazer. rm * não é seguro porque não funciona se houver arquivos cujo nome comece com - .

zsh adaptou e melhorou esse recurso tcsh e tornou o padrão:

zsh$ rm ./*
zsh: sure you want to delete the only file in /home/chazelas/. [yn]?
zsh$ rm foo /*
zsh: sure you want to delete all 33 files in / [yn]?

(note que isso acontece antes rm é mesmo envolvido. Acima de foo não é excluído até que você pressione y ).

Você pode desativá-lo com

set -o rmstarsilent

Existe até uma opção rmstarwait para os usuários felizes:

RM_STAR_WAIT:

If querying the user before executing 'rm ' or 'rm path/', first wait ten seconds and ignore anything typed in that time. This avoids the problem of reflexively answering 'yes' to the query when one didn't really mean it. The wait and query can always be avoided by expanding the '*' in ZLE (with tab).

Outra maneira de ignorar essa verificação é usar rm ./** .

    
por 12.11.2018 / 21:17
0

A melhor prática, e o que venho fazendo há anos, é ativar o autocompletar no meu shell e pressionar a guia (ou qualquer tecla que você mapeie essa função) para poder ver os arquivos que * expandirá depois que você pressionar a tecla.

Além disso, adicionei um alias de rm como este:

alias rm='nocorrect rm -Iv'
  • nocorrect basicamente cuida de ignorar as vezes redundantes mensagem de autocorreção ao digitar rm no meu shell, Zsh. Digamos que você tem um arquivo chamado rmi em seu diretório atual, ou há um binário chamado rmi , o nocorrect cuidará disso.

  • -I é para um prompt quando rm está excluindo mais de 3 arquivos ou ao remover recursivamente, isto é. diretórios.

  • -v para verbose, é apenas para ver o que rm está excluindo; Eu só quero cancelar essa operação ( Ctrl-c ) se por algum motivo eu estiver excluindo os arquivos errados. Raramente usado, mas bom ver o processo.
por 12.11.2018 / 20:55

Tags