88 votes

Comment faire pour que 'rm' déplace les fichiers vers la poubelle ?

J'utilise le terminal quotidiennement, je vais souvent utiliser rm DirectoryName . Parfois, je suis un peu impatient et je fais rm * sans délibérer si c'est sûr. Comme vous pouvez l'imaginer, ces manigances me sont parfois revenues en pleine figure. Quelqu'un sait-il comment créer un mappage pour rm whatever déplace tout dans la corbeille que je supprime ensuite manuellement.

4 votes

Vous pouvez faire mv /file/to/delete ~./Trash

8 votes

Il est difficile de mettre des roues d'entraînement sur un outil de précision comme rm sans casser d'autres scripts. Quelque chose comme alias rm=/bin/rm -i devrait vous permettre de vous mettre en sécurité. Aussi - quel répertoire de la corbeille voulez-vous que rm utilise ? Cela devient compliqué car Mac OS X possède un répertoire de corbeille pour chaque volume ainsi qu'une corbeille au niveau de l'utilisateur.

1 votes

Si vous utilisez zsh, par défaut, il vous demandera de le faire lorsque vous faites rm * o rm /path/*

0voto

Paschalis Points 269

Introduction (vous pouvez la sauter)

Pour moi rm -i serait suffisant, car il vous invite à le faire avant de supprimer un fichier. Cependant, une sécurité supplémentaire fournie par safe-rm n'est pas une mauvaise idée du tout.

Un simple alias comme rm=safe-rm -i pourrait être suffisante, cependant rm -rf ne fonctionnerait pas, car -i est remplacée par -f .

Donc, nous devons nous assurer que -i viennent toujours après -f !


Ma solution (3 étapes) :

  • Installez le safe-rm : brew install safe-rm

    Vous pouvez toujours travailler avec rm mais vous avez modifié le RM_BIN à l'étape suivante

  • Modifiez votre ~/.profile (ou bash_profile ou autre), et mettez l'extrait de code suivant, (qui contient un fichier alias et un 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
    }
  • Enfin , logout y login pour que les mises à jour du profil soient appliquées. N'ESSAYEZ PAS utilisez-le avant une déconnexion/login !


Notes :

  • Il peut être appliqué à n'importe quelle distro Linux, avec de légères modifications.
  • Cela n'incite pas votre personnel à se battre. Il vous demande simplement avant d'effacer chaque fichier !
  • Il fonctionne avec -rf et avec des regex.
  • Si vous voulez vraiment utiliser rm -rf SANS On vous demande chaque fichier/dossier que vous pouvez toujours utiliser. /bin/rm -rf (ou safe-rm -rf si vous l'aviez installé).
  • Plus d'accidents involontaires rm -rf ou rm * ;)

8 votes

Aliasing rm à tout ce qui est plus grand que lui (par ex. alias rm='sudo rm' ), c'est comme attacher un Uzi à un couteau de cuisine : un jour, vous obtiendrez plus que ce que vous aviez prévu lorsque vous voudrez couper cet ananas. L'aliasing rm à tout ce qui est plus petit que lui (par ex. alias rm='rmtrash' ), c'est comme si vous laissiez vos enfants jouer avec des grenades désarmées sans leur apprendre ce qu'elles sont réellement : un jour, lorsqu'ils en rencontreront une vraie, ils ne la traiteront pas avec la prudence nécessaire. Quoi qu'il en soit, l'aliasing rm est aussi mauvais pour les administrateurs système que le manque d'hygiène l'est pour la sécurité personnelle et la santé publique !

2 votes

Utiliser quelque chose comme safe-rm est un conseil raisonnable. L'aliaser en rm ne l'est pas. Utilisez-le sous son propre nom ou un alias unique afin de ne pas prendre pour acquis un filet de sécurité qui ne sera pas toujours là.

0 votes

Je comprends votre point de vue. MAIS, la raison pour laquelle j'ai fait cela, c'est que je travaille avec de nombreux terminaux certains terminaux distants, et d'autres locaux. Et je veux jeter beaucoup de grenades sur les terminaux distants, mais lorsque je tire accidentellement sur le sceau de sécurité sur le terminal local, je veux voir une avertissement avant le explosion se produit.

-1voto

CodeFarmer Points 99

Mac bigSur

brew install trash

alias rm='trash'
which rm

touch a.md
rm a.md
ls ~/.Trash

0 votes

Pourquoi ça ne marche que sur Big Sur ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X