Como posso fazer 'rm' mover arquivos para a lixeira?

62

Eu uso o terminal diariamente, usarei frequentemente rm DirectoryName. Às vezes eu fico um pouco louco e faço rm *. Como você pode imaginar, essas travessuras às vezes voltam e me atingem na cara. Alguém sabe como eu crio um mapeamento para rm whatevermover tudo para a lixeira que eu excluo manualmente.

Steve
fonte
3
você pode fazermv /file/to/delete ~./Trash
6
É difícil colocar rodinhas em uma ferramenta de precisão como a rm sem quebrar outros scripts. Algo como alias rm=/bin/rm -ivocê deve treiná- lo com segurança para fora do seu louco . Além disso - qual diretório da Lixeira você deseja que a rm use? Fica desajeitado, pois o Mac OS X possui um diretório de lixeira para cada volume, além de uma lixeira no nível do usuário.
Bmike
1
Se você usa o zsh, por padrão, ele será solicitado quando você usar rm *ourm /path/*
Daniel Serodio 13/06
1
Adicione-me à lista de pessoas que acham que essa é uma pergunta tão hedionmente perigosa para responder. Se você trabalhou para mim, eu lutaria para não dar um tapa até você prometer NUNCA "ficar meio louco" em um prompt do shell e emitir comandos como 'rm'. Eu também garantiria que você não tenha privilégios administrativos no sudo para qualquer máquina que eu use ou tenha responsabilidade. Antes de digitar "rm" ou "sudo", levanto-me fisicamente e me pergunto se tenho 100% de certeza de que compreendo as repercussões do que estou prestes a fazer. Talvez você só precise fazer um "rm -rf" e sofrer por um tempo.
Wilfred Smith
Peço desculpas antecipadamente se meu comentário parecer brutal, mas a própria pergunta me horroriza.
Wilfred Smith

Respostas:

79

Péssima ideia

Usar rmpara mover arquivos para o lixo é como maconha. É comum e prazeroso, mas pode ser ruim para você no futuro. ;)

Você realmente precisa se controlar ao usar rm.


Não use rm

Imagine , você se acostuma a se mudar para o lixo e criar um hábito. Claro, seu sistema está seguro, mas quando você entra no caderno de um amigo (ou sua esposa ou seu chefe) e precisa excluir alguma coisa? Você estará realmente usando o real rm- excluindo esses arquivos para sempre. É um mau hábito, e você precisa saber disso.

Então, em vez disso, instale rmtrashe crie o hábito de usá-lo:

# install rmtrash, (either from the macports or by the brew.)
$ alias trash="rmtrash"
$ alias   del="rmtrash"       # del / trash are shorter than rmtrash

Corrigindo maus hábitos

Outra coisa que você pode fazer para se forçar a usar, em rmtrashvez de, rmé alias, para uma mensagem personalizada no seu .profile.

alias rm="echo Use 'del', or the full path i.e. '/bin/rm'"

Portanto, sempre que você usar rm, você será solicitado a usar rmtrashou /bin/rm. Lembre-se, isso é apenas temporário, depois de um tempo você deve remover o alias.


Nunca, faça algo assim:

$ pwd
/
$ cd /tnp; rm -rf *
sh: cd: /tnp: No such file or directory

Pop Quiz: Em que diretório o rmcomando será executado? :)

Ps: Acabamos de remover algumas edições indesejadas deste post, o que adicionou algumas bobagens sobre os pseudônimos.

jm666
fonte
14
&&é a sua salvação. ;é o diabo. PS A resposta é que praticamente tudo no seu sistema desaparece, no exemplo acima.
21711 Jason Salaz
Embora, rm não exclua com segurança, mas mover para a lixeira / vazio (na minha configuração).
Mike Graf
1
Usuários do Debian / Ubuntu instalam em trash-clivez disso, ex. aptitude install trash-cli- veja github.com/andreafrancia/trash-cli
Daniel Sokolowski
@ jm666 Verifique também o lixo ( publicação e fonte do blog ). Ele solicita ao Finder arquivos do lixo. Além disso, ele também pode usar APIs padrão do sistema de arquivos Objective C (mais rápido) e fallback para o Finder se houver direitos insuficientes. brew install trash
parth
rmtrashé realmente antigo, tendo sido atualizado pela última vez em 2003, e mostra. Ele tem muito menos opções do que rm, e se você diz rmtrashem um volume secundário, move esses arquivos para a pasta de lixo do usuário na unidade do sistema, o que pode levar muito tempo para arquivos grandes. A trashopção recomendada pela parth é melhor, resolvendo o problema de manter o mesmo volume, mas ainda faltando muitas rmopções.
Warren Young
25

Posso pensar em uma dúzia de maneiras de codificar isso, mas me recuso categoricamente a digitar qualquer uma delas em uma resposta. Eu recomendo fortemente que você reduza o seu hábito de ficar um pouco louco . Você não deve ter o hábito de usar rmse não puder usá-lo adequadamente.

O problema fundamental aqui é que, mesmo que você instale uma rede de segurança em seu próprio sistema, isso só ajudará a manter seus maus hábitos e quando você estiver em outra máquina em algum dia que não possua as mesmas proteções personalizadas, faça algo épicamente ruim.

A solução adequada é usá- rmlo como deveria ser usado, incluindo a adição manual do -iargumento sempre que houver dúvida sobre como um globo se expandirá e tenha bons backups do sistema que você pode restaurar em caso de erro grave do usuário. Tentar adicionar "lixo" a comandos que no resto do universo não usam, é um passo intermediário que é o pior dos dois mundos.

Ou use o lixo ou não. Usarrmnão vai para o lixo, ele remove.

Se você quiser usar o lixo, não há nada de errado nisso. Apenas adquira o hábito de usar o rmtrashcomando em vez de rm. Isso ajudará seu cérebro a entender o que está acontecendo e a não criar um mau hábito que causará pesar mais tarde.

Caleb
fonte
1
Seu ponto não calcula nesta instância. As pessoas excluem as coisas acidentalmente diariamente, os backups do sistema não funcionam no caso de um PC doméstico (que é o meu), pois os recursos são limitados, uma mudança para a lixeira é uma maneira muito mais eficiente de lidar com essas exclusões para o meu particular. caso de uso.
steve
5
@ steve você perdeu completamente o ponto. rmpor definição, remove um arquivo do disco. Não o envia para o lixo. Ensinar-se a usar rmquando você quer dizer enviar para o lixo o prepara para um desastre. Se você deseja enviar para o lixo, usar rmtrashou um programa que foi projetado para o trabalho, não terá pesadelos mais tarde. Eu não estava dizendo que usar o lixo é inerentemente errado, mas se você quiser usá-lo, não conecte-o a algo que não se destina a usá-lo!
Caleb
2
brew install rmtrashe pare de usarrm
GabLeRoux
Esta é uma resposta incrível, esclareceu algumas coisas para mim. Vou tentar criar o hábito de usar em rmtrashvez de rm.
Sheharyar
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Em seguida, instale "rm-trash"
Natesh bhat
3

Existem maneiras de se proteger de resultados horríveis rm. No entanto, concordo com os outros comentaristas aqui: muito poucos são bons.

Não acredite nem por um minuto que a alteração do ambiente de comando o ajudará. Por exemplo, você encontrará pessoas on-line em todos os lugares que recomendam fazer esse tipo de coisa:

alias rm="rm -i"

ou

function rm()
{
    echo >&2 'rm forbidden; use "/bin/rm"'
}
export -f rm

Isso não vai funcionar. Período. Existem muitos casos de uso nos quais esses pequenos truques de salão falham miseravelmente.

A única maneira robusta com a qual me livrei do perigo rmé configurando um processo de backup regular por meio do cron nos diretórios em que trabalho. O Raw UNIX faz isso por você de maneira agradável, com grande simplicidade, usando findem conjunto com -mtimepara verificar os arquivos que foram atualizados dentro ou desde um certo período de tempo.

Jim Campbell
fonte
+1 por cronsi só. Obrigado :)
bmike
2

Use uma ferramenta de linha de comando como rmtrash ou um script que use appscript para ligar para o Finder para excluir.

Depois de instalar o rmtras para dizer / usr / local / bin / rmtrash, crie um alias para o bash

alias rm='rmtrash'

Você pode usar \ rm para chamar rm diretamente e ignorar o alias

user151019
fonte
14
Se você usa uma ferramenta como essa rmtrash, faça um favor a si mesmo e use-a pelo próprio nome . Jamais aliás coisas que não são rmpara rm, ele vai algum dia te morder.
Caleb
1
rmtrashnão é compatível com rm(não suporta os mesmos parâmetros de linha de comando como -r) para um alias não é realmente útil em qualquer caso
Perry
É uma péssima idéia usar o alias rmtrashpara rm. Não apenas eles não são compatíveis, mas também reforçam o mau hábito e você acidentalmente o usará rmem outro sistema pensando que você está usando apenas rmtrash.
Fayaz 20/08
1

Só quero adicionar um hábito útil para aqueles que ainda não fazem isso. Antes de usar rm para qualquer coisa, faça 'ls' primeiro. Dessa forma, você pode ver todos os arquivos que você deseja excluir. Em vez de redigitar, basta puxar o comando 'ls' anterior e trocar ls por rm. Esse hábito reduziu muita ansiedade ao invocar a empresa.

Scott Bridgman
fonte
-1

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 * ;)
Paschalis
fonte
5
Criar um alias para algo maior que ele (por exemplo alias rm='sudo rm') é como amarrar um Uzi a uma faca de cozinha: um dia você receberá mais do que esperava quando cortará esse abacaxi. Aliasizar rm a algo menor que ele (por exemplo alias rm='rmtrash') é como deixar seus filhos brincar com granadas desarmadas e não ensinar a eles o que realmente são: um dia, quando encontrarem um real, não o tratarão com a devida cautela. De qualquer maneira - aliasing rm é ruim para sua segurança pessoal e saúde pública!
Caleb
2
Usar algo como safe-rm é um conselho razoável. Aliasing para rm não é. Use-o com seu próprio nome ou um apelido exclusivo para não ter como garantida uma rede de segurança que nem sempre estará lá.
Caleb
Eu entendo o seu ponto. MAS, a razão pela qual fiz isso, é que trabalho com muitos terminais .. alguns terminais remotos e alguns locais. E quero lançar muitas granadas nos terminais remotos, mas quando puxo acidentalmente o selo de segurança no terminal local, quero receber um aviso antes que a explosão ocorra.
27414
@ Paschalis e o que acontece se um script ou programa instalado precisar usar rm? Além disso, o argumento de Caleb é ainda mais válido - se você se acostumar com um sistema com alias seguro-rm, poderá se tornar imprudente com ele e, eventualmente, usá-lo em um sistema com um rm não-aliado.
Manishearth