Ative a confirmação para o comando rm com o sinalizador de força

0

Existe alguma opção para ativar a confirmação para o rm -rf. Nós tínhamos uma configuração de alias para rm = rm -i, então, sempre que deletamos um arquivo, ele pede uma confirmação, mas quando o flag -f é fornecido, ele não pede confirmação.

Então existe alguma opção para pedir confirmação para o comando rm (ou rm -r) com o sinalizador force que é para os comandos rm -f e rm -rf?

No arquivo .bashrc, tentei configurar o alias como

alias 'rm -rf'='rm -rfi'

mas não está funcionando. Ao fazer referência a este URL : tentei criar uma função como

function rm () 
{ if [[ $@ == "-rf" ]]; 
then command rm -rfi 
else command rm "$@" 
fi } 

mas isso também não funciona. Alguém pode me ajudar a consertar isso?

    
por Geo 19.01.2017 / 10:32

3 respostas

0

Você pode corrigir isso removendo a opção -f .

'-i' means interactive.
'-f' means force everything. That includes no confirmation.

Citando parte de man rm em meu próprio sistema (Nenhuma instalação corporativa RedHat, mas perto o suficiente):

-f      Attempt to remove the files without prompting for confirmation,
        regardless of the file's permissions.  If the file does not
        exist, do not display a diagnostic message or modify the exit
        status to reflect an error.  The -f option overrides any previous
        -i options.

A última linha responde à sua pergunta.

    
por 19.01.2017 / 10:53
0

Você fez a mesma pergunta e recebeu sua resposta aqui . Não vai funcionar fora da caixa! Você precisa de um invólucro de algum tipo.

    
por 19.01.2017 / 11:31
0

Corrigida a solicitação de confirmação no comando rm com problema de flag -f. Testou vários casos de exclusão e está funcionando.

Você pode adicionar o seguinte script no arquivo .bashrc.

rm() {
     if [[ $* == -rf* ]]; then
           shift 1;
           command rm -rfi "$@" | more
     elif [[ ${@: -1} == -rf* ]]; then
           command rm "$@" -rfi | more
    else
           command rm -i "$@"
    fi
}

Por favor, certifique-se de que nenhum apelido para rm esteja definido de outra maneira enquanto estiver executando a fonte .bashrc, obteremos um erro.

Isso funciona quando damos –rf no primeiro e no último como a seguir e também funciona para arquivos (portanto, não é necessário usar alias rm = rm-i)

[root@localhost ~]# mkdir test
[root@localhost ~]# rm -rf test
rm: remove directory ‘test’? 
[root@localhost ~]# rm test -rf
rm: remove directory ‘test’? 
[root@localhost ~]#
    
por 19.01.2017 / 15:07