Scripting 'rm' e 'rm -i'

3

Eu quero criar um script que, sempre que houver mais de três arquivos sendo removidos, invoque rm -i por padrão. Eu sei que vai nos arquivos de inicialização, mas parece que não consigo trabalhar.

Até agora:

if [$file -ge 3]; then
  rm -i 
  exit 0 
else
  rm
exit 1
    
por user2805361 23.09.2013 / 22:42

3 respostas

15

A função dada na resposta de @ Tim funcionará em qualquer sistema que esteja executando o bash. No entanto, o GNU rm já tem uma opção para o que você precisa (de man rm ):

   -I     prompt  once  before  removing more than three
          files, or  when  removing  recursively.   Less
          intrusive  than -i, while still giving protec‐
          tion against most mistakes

Então, se você tem o GNU rm (o que você deve fazer se estiver rodando o Linux) tudo que você precisa é adicionar esta linha ao seu /.bashrc :

alias rm='rm -I'

Isso será avisado antes de excluir mais de 3 arquivos, mas não solicitará confirmação para cada arquivo; se você confirmar a ação, todos os arquivos serão excluídos.

    
por 23.09.2013 / 23:46
8

Isso funciona para mim, adicione essas linhas ao seu ~/.bashrc :

rm() {
   if [ "$#" -ge 3 ]; then
        command rm -i "$@"
   else
        command rm "$@"
   fi
}

Isto fará uma função rm que será chamada em vez de /bin/rm toda vez que você executar rm .

"$#" expande para o número de argumentos transmitidos.

    
por 23.09.2013 / 22:54
1

Aqui está uma maneira concisa e portátil de fazer isso:

rm() {
  command rm $([ ${#} -gt 3 ] && echo \-i) "$@"
}

No entanto, eu recomendo que você evite alterar a semântica de rm , consulte esta resposta para obter detalhes.

    
por 15.03.2016 / 08:31