Substituto seguro para OS X `rm`?


9

Estou acostumado a ter que usar o rmapelido de algo mais seguro.

Estou usando osx-trash, mas depois de atualizar para o Ruby 1.9.2, isso pára de funcionar.

Eu sei trash-clido Python, mas eu preferiria algo que move arquivos para a pasta Lixeira no OS X em vez de outro diretório.

Alguém tem uma boa solução?


9
Por favor, não se acostume com um alias rm, se acostume mv files/to/be/deleted ~/.Trash. É seguro e consistente entre sistemas.
Asmus

Asmus: você vê que só funciona se o seu mac tiver apenas 1 partição. Se você tiver outra partição, mover para ~ / .Trash não está realmente correto (minha partição ~ não é grande o suficiente).
disappearedng

11
Bem, você deveria ter mencionado na sua pergunta que você tem várias partições!
slhck 25/07

11
desapareceu: bem, acho que mvainda é sua aposta mais segura. Você pode criar facilmente uma nova pasta em sua outra partição chamada Trash(ou como desejar) e depois mvos arquivos lá. Quando tiver certeza de que eles podem ser excluídos, exclua e recrie essa pasta completa.
Asmus

e então você pode apenas ter ~ / Trash ser um soft link para a pasta Lixeira na partição que tem espaço suficiente
Propulsão Alcubierre

Respostas:


8

Para OSX, você pode usar safe-rm

brew install safe-rm

Você precisa executar uma etapa extra para preferir o padrão rm- adicione um link simbólico.

echo $PATH

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

Adicionar link simbólico a safe-rm

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

Para remover e restaurar o padrão, rmvocê pode remover o link simbólicorm /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

O teste com rm -rf /testele negará a exclusão desafe-rm.conf


pode ser bom adicionar também /à lista de caminhos que não devem ser excluídos para impedir o clássico rm -fr /
Mikael Lepistö

3

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

Eu escrevi uma função shell que não sobrescreve arquivos como mv * ~/.Trashfaria. 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
}

Sim, eu tenho mais de 1 partição e eu gostaria de manter os arquivos apagados na mesma partição em vez de movê-los através
disappearedng

Eu adicionei links para dois outros utilitários e outra função. Cada um deles deve manter os arquivos na mesma partição.
Lri

2

Introdução (você pode pular)

Para mim rm -iseria suficiente, porque solicita que você exclua qualquer arquivo. No entanto, alguma segurança extra fornecida por safe-rmnão é uma má idéia.

Um simples aliascomo rm=safe-rm -i poderia ser suficiente, no entanto rm -rf, não funcionaria, porque -ié substituído -f.

Então, temos que garantir que -isempre venha depois -f!


Minha solução (3 etapas):

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

    Você ainda pode trabalhar rm, mas modificou o RM_BINna próxima etapa

  • Edite seu ~/.profile(ou bash_profile ou o que for) e coloque o seguinte snippet de código (que contém um aliase a 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
    }
    
  • Por fim , logoute login, portanto, as atualizações no .profile são aplicadas. NÃO o use antes de um logout / login!


Notas:

  • Pode ser aplicado a qualquer distribuição Linux, com pequenas modificações.
  • NÃO move sua equipe para debater. Ele apenas pergunta antes de excluir cada arquivo!
  • Trabalha com -rfe com expressões regulares.
  • Se você realmente deseja usar rm -rf SEM ser solicitado a cada arquivo / pasta, você ainda pode usá-lo /bin/rm -rf(ou safe-rm -rfse o tiver instalado).
  • Não é mais intencional rm -rf ou rm * ;)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.