Evitando a exclusão acidental do diretório. Fazendo um alias que contém opções?

3

Eu uso um alias para me impedir de excluir arquivos acidentalmente, e gostaria de fazer algo semelhante para diretórios.

Para arquivos, adicionei o seguinte ao meu .bashrc :

alias rm="rm -i"

Gostaria também de evitar que eu removesse acidentalmente um diretório, o que tentei fazendo isso:

alias rm -rf="rm -rfi"

e isso:

alias "rm -rf"="rm -rfi"

Mas nem trabalho. Alguma sugestão?

    
por ryanjdillon 09.08.2013 / 10:37

2 respostas

6

Do bash (1):

ALIASES

[... ]The first word of each simple command, if unquoted, is checked to see if it has an alias[...] The characters [...] and any of the shell metacharacters or quoting characters listed above may not appear in an alias name.

Portanto, os aliases só podem ser uma única palavra sem caracteres de citação.

Usar -f e -i em uma chamada para rm também não faz muito sentido porque eles são um pouco contraditórios (rm (1)):

-f, --force ignore nonexistent files and arguments, never prompt

-i prompt before every removal

Mas aqui está a coisa boa - seu alias para rm é realmente usado mesmo quando você está chamando rm -r , porque a primeira palavra - rm - tem um alias - rm -i , então ele é substituído por isso!

$ alias rm
bash: alias: rm: not found
$ alias rm='rm -i'
$ mkdir test
$ rm -r test
rm: remove directory ‘test’?

/ edit: Raphael Ahrens também mencionou nos comentários que usar -f (force) não é necessário para remover diretórios (como já pode ser visto no meu exemplo), -r (recursiva) é suficiente:

-r, -R, --recursive remove directories and their contents recursively

    
por 09.08.2013 / 10:54
1

Aliasing rm é perigoso. Assim que você estiver em uma caixa que não tenha esses aliases configurados, você causará algum dano.

No que diz respeito a "impedir-me de remover acidentalmente um diretório", essa é a finalidade do sinal -r .

Por favor, não substitua comandos como esse, você nunca sabe o que os scripts de suposições vão fazer. Se for necessário, escolha um nome diferente de rm , caso contrário, altere algo em seu fluxo de trabalho que impeça o uso de rm -rf com desrespeito.

    
por 09.08.2013 / 10:53