Substituto seguro para o OS X 'rm'?

8

Estou acostumado a ter rm para alias algo mais seguro.

Eu tenho usado osx-trash , mas quando eu atualizo para o Ruby 1.9.2, isso para de funcionar.

Eu sei sobre trash-cli do Python, mas eu prefiro muito mais algo que mova arquivos para a pasta Lixeira no OS X em vez de outro diretório.

Alguém tem uma boa solução?

    
por disappearedng 25.07.2011 / 01:13

3 respostas

7

Para o OSX, você pode usar safe-rm

brew install safe-rm

Você precisa fazer um passo extra para preferir o padrão rm - adicionar um link simbólico.

echo $PATH

Para mim, tenho /usr/local/bin: primeiro, o mesmo diretório que safe-rm install

Adicione um link simbólico para safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

Para remover e restaurar o padrão rm , você pode remover o link simbólico rm /usr/local/bin/rm

O arquivo de configuração pode ser adicionado em /etc/safe-rm.conf

por exemplo:

/private
/Applications
/Developer
/Library
/Network
/System
/Users
/Volumes
/test

Teste com rm -rf /test negará a exclusão de safe-rm.conf

    
por 12.07.2016 / 06:24
3

hasseg.org/trash é um utilitário Objective-C como osx-trash .

Eu escrevi uma função de shell que não sobrescreve arquivos como mv * ~/.Trash . Ele sempre move itens para o volume de inicialização.

trash() {
    for f in "$@"; do
        bn=$(basename "$f")
        while [ -e ~/.Trash/"$bn" ]; do
            bn="$bn $(date +%H.%M.%S %p)"
        done
        mv "$f" ~/.Trash/"$bn"
    done
}
    
por 25.07.2011 / 10:31
2

Introdução (você pode ignorá-lo)

Para mim, rm -i seria suficiente, porque ele avisa antes de excluir qualquer arquivo. No entanto, alguma segurança extra fornecida por safe-rm não é uma má ideia.

Um simples alias como rm=safe-rm -i poderia ser suficiente, mas rm -rf não funcionaria, porque -i é sobreposto por -f .

Então, temos que ter certeza de que -i sempre vem depois de -f !

Minha solução (3 etapas):

  • Instale o safe-rm: brew install safe-rm

    Você ainda pode trabalhar com rm , mas modificará o RM_BIN na próxima etapa

  • Edite seu ~/.profile (ou bash_profile ou qualquer outro) e coloque o seguinte trecho de código (que contém alias e function ):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • Finalmente , logout e login , as atualizações no .profile são aplicadas. NÃO use antes de fazer logout / login!

Notas:

  • Pode ser aplicado a qualquer distribuição do Linux, com pequenas modificações.
  • NÃO move sua equipe para debater. Ele só pergunta antes de deletar cada arquivo!
  • Funciona com -rf e com regexes.
  • Se você realmente quiser usar rm -rf SEM sendo solicitado para cada arquivo / pasta, ainda poderá usar /bin/rm -rf (ou safe-rm -rf se você o instalou).
  • Não mais involuntário rm -rf ou rm * ;)
por 08.06.2014 / 19:11

Tags