Comment puis-je faire "rm" déplacer des fichiers dans la corbeille?

62

J'utilise le terminal quotidiennement, je l'utilise souvent rm DirectoryName. Parfois, je suis un peu fou et fais rm *. Comme vous pouvez l'imaginer, ces manigances sont parfois revenues et m'ont frappé au visage. Est-ce que quelqu'un sait comment je crée un mappage alors rm whateverdéplace tout dans la corbeille que je supprime ensuite manuellement.

steve
la source
3
vous pouvez fairemv /file/to/delete ~./Trash
6
Il est difficile de placer 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 -idevrait vous permettre de sortir en toute sécurité de votre fou . De plus, quel répertoire de corbeille voulez-vous que votre entreprise utilise? Cela devient maladroit puisque Mac OS X a un répertoire de corbeille pour chaque volume ainsi qu'une corbeille au niveau utilisateur.
bmike
1
Si vous utilisez zsh, par défaut, il vous le demandera quand vous ferez rm *ourm /path/*
Daniel Serodio
1
Ajoutez-moi à la liste des personnes qui pensent que la question est si dangereuse à répondre. Si vous travailliez pour moi, j'aurais du mal à ne pas vous gifler avant que vous ne promettiez JAMAIS de "devenir un peu fou" à l'invite du shell et d'émettre des commandes telles que "rm". Je voudrais également m'assurer de ne pas disposer de privilèges d'administration sudo sur les machines que j'utilise ou que je suis responsable. Avant de taper "rm" ou "sudo", je me lève physiquement et me demande si je suis à 100% certain de bien comprendre les répercussions de ce que je suis sur le point de faire. Peut-être avez-vous juste besoin de faire un "rm-rf" et de souffrir pendant un moment.
Wilfred Smith
Toutes mes excuses par avance si mon commentaire semble brutal, mais la question même me fait horreur.
Wilfred Smith

Réponses:

79

Mauvaise idée

Utiliser rmpour déplacer des fichiers dans la corbeille est comme une mauvaise herbe. C’est courant et agréable, mais cela peut être mauvais pour l’avenir. ;)

Vous avez vraiment besoin de vous contrôler lorsque vous utilisez rm.


Ne pas utiliser rm

Imaginez , vous vous habituez à aller à la corbeille et à en prendre l’habitude. Bien sûr, votre système est en sécurité, mais lorsque vous vous connectez au carnet de notes d'un ami (ou de votre femme ou de votre patron) et que vous devez supprimer quelque chose? En réalité, vous utiliserez le réel rm- supprimer ces fichiers pour toujours. C'est une mauvaise habitude, et vous devez le savoir.

Alors, installez-vous rmtrashet prenez l’habitude de l’utiliser:

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

Corriger les mauvaises habitudes

Une autre chose que vous pouvez faire pour vous forcer à utiliser à la rmtrashplace rmest de l’aliaser dans un message personnalisé dans votre .profile.

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

Ainsi, chaque fois que vous utilisez rm, vous serez invité à utiliser rmtrashou /bin/rm. Rappelez-vous que ceci n’est que temporaire, vous devrez au bout d’un moment supprimer l’alias.


Jamais, fais quelque chose comme ça:

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

Pop Quiz: Dans quel répertoire la rmcommande sera- t-elle exécutée? :)

Ps: Je viens de supprimer quelques modifications indésirables de ce message, ce qui a ajouté des absurdités au sujet des alias.

jm666
la source
14
&&est votre bouée de sauvetage. ;c'est le diable. PS La réponse est que pratiquement tout ce qui se trouve sur votre système disparaît, dans l'exemple ci-dessus.
Jason Salaz
Bien que, rm ne supprime pas de manière sécurisée, mais le déplacement vers la corbeille / vide le fait (dans ma configuration).
Mike Graf
1
Les utilisateurs Debian / Ubuntu installent à la trash-cliplace, ex. aptitude install trash-cli- voir github.com/andreafrancia/trash-cli
Daniel Sokolowski
@ jm666 Consultez également la corbeille ( article de blog et source ). Il demande au Finder de supprimer des fichiers. De plus, il peut également utiliser les API de système de fichiers Objective C standard (plus rapide) et se replier sur le Finder si les droits sont insuffisants. brew install trash
parth
rmtrashest vraiment vieux, ayant été mis à jour pour la dernière fois en 2003, et ça se voit. Il comporte beaucoup moins d'options que rm, et si vous dites rmtrashsur un volume secondaire, il déplace ces fichiers dans la corbeille de votre utilisateur sur le lecteur système, ce qui peut prendre beaucoup de temps pour les gros fichiers. L' trashoption recommandée par parth est préférable, résolvant le problème de maintien du même volume, mais manquant encore de nombreuses rmoptions.
Warren Young
25

Je peux penser à une douzaine de façons de coder cela, mais je refuse catégoriquement de saisir l'une d'elles dans une réponse. Je vous recommande fortement de freiner votre habitude de devenir un peu folle . Vous ne devriez pas avoir l'habitude d'utiliser rmdu tout si vous ne pouvez pas l'utiliser correctement.

Le problème fondamental ici est que même si vous installez un filet de sécurité sur votre propre système, cela ne fera que vous aider à conserver vos mauvaises habitudes et lorsque vous vous retrouverez un jour sur une autre machine ne disposant pas des mêmes protections personnalisées, faire quelque chose d'épique.

La solution appropriée consiste à utiliser rmce qui était censé être utilisé, y compris en ajoutant manuellement l' -iargument lorsque vous avez des doutes sur la façon dont un glob va se développer et que vous disposez de bonnes sauvegardes système que vous pouvez restaurer en cas d'erreur grave de l'utilisateur. Essayer d’ajouter des "ordures" à des commandes qui ne sont pas utilisées dans le reste de l’univers est une étape intermédiaire qui est le pire des deux mondes.

Utilisez la corbeille ou ne le faites pas. L'utilisationrmne va pas à la corbeille, elle supprime.

Si vous voulez utiliser la corbeille, il n'y a rien de mal à cela. Prenez l’habitude d’utiliser la rmtrashcommande au lieu de rm. Cela aidera votre cerveau à comprendre ce qui se passe et à ne pas vous prendre dans une mauvaise habitude qui causera du chagrin plus tard.

Caleb
la source
1
Votre point ne calcule pas dans ce cas. Les gens effacent accidentellement des objets tous les jours, les sauvegardes du système ne fonctionnent pas dans le cas d’un ordinateur personnel (ce qui est le mien) car les ressources sont limitées, le transfert à la corbeille est un moyen beaucoup plus efficace de gérer ces suppressions pour mon particulier. cas d'utilisation.
Steve
5
@steve vous avez complètement manqué le point. rmpar définition, supprime un fichier du disque. Il n'envoie pas à la poubelle. En vous apprenant à utiliser rmquand vous voulez dire, envoyer à la corbeille vous prépare au désastre. Si vous souhaitez envoyer à la corbeille, utiliser rmtrashou un programme conçu pour le travail, vous ne rencontrerez pas de cauchemars plus tard. Je ne disais pas que l'utilisation de la corbeille est fondamentalement fausse, mais si vous voulez l'utiliser, ne la connectez pas à quelque chose qui n'était pas destiné à l'utiliser!
Caleb
2
brew install rmtrashet cesser d'utiliserrm
GabLeRoux
C'est une réponse géniale, qui clarifie quelques points pour moi. Je vais essayer de prendre l'habitude d'utiliser rmtrashau lieu de rm.
Sheharyar
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Puis installez "rm-trash"
Natesh bhat
3

Il existe des moyens de vous protéger des conséquences horribles rm. Cependant, je suis d’accord avec les autres commentateurs: très peu sont bons.

Ne croyez pas un instant que la modification de l'environnement de commande vous aidera. Par exemple, vous constaterez que des internautes partout recommandent de procéder de la sorte:

alias rm="rm -i"

ou

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

Cela ne fonctionnera pas. Période. Il existe une multitude de cas d'utilisation où ces petites astuces de parloir vont vous échouer lamentablement.

Le seul moyen efficace rmpar lequel je me suis épargné du danger est de mettre en place un processus de sauvegarde régulier via cron sur les répertoires dans lesquels je travaille. Raw UNIX le fait bien pour vous, avec une grande simplicité, en utilisant findconjointement avec -mtimepour vérifier les fichiers qui ont été mis à jour au cours de ou depuis un certain temps.

Jim Campbell
la source
+1 pour cronseul. Merci :)
bmike
2

Utilisez un outil de ligne de commande comme rmtrash ou un script qui utilise appscript pour appeler le Finder afin de le supprimer.

Après avoir installé rmtras, dites à / usr / local / bin / rmtrash la création d’un alias pour bash

alias rm='rmtrash'

Vous pouvez utiliser \ rm pour appeler directement rm et ignorer l’alias

utilisateur151019
la source
14
Si vous utilisez un outil du genre rmtrash, faites-vous une faveur et utilisez-le sous son propre nom . Ne dites jamais ce qui ne rmva pas rm, il vous mordra un jour.
Caleb
1
rmtrashn'est pas compatible avec rm(ne prend pas en charge les mêmes paramètres de ligne de commande que -r), aussi un alias n'est-il vraiment pas utile dans tous les cas
Perry
Il est une mauvaise idée d'alias rmtrashpour rm. Non seulement ils ne sont pas compatibles, mais cela va également imposer la mauvaise habitude et vous utiliserez accidentellement rmdans un autre système en pensant que vous utilisez uniquement rmtrash.
Fayaz
1

Je veux juste ajouter une habitude utile à prendre pour ceux qui ne le font pas déjà. Avant d'utiliser rm pour quelque chose que ce soit, faites-le en premier. De cette façon, vous pouvez voir tous les fichiers que vous avez l'intention de supprimer. Ensuite, au lieu de ressaisir, tirez simplement la commande 'ls' précédente et remplacez ls par rm. Cette habitude a réduit beaucoup d’anxiété lorsqu’on invoquait rm.

Scott Bridgman
la source
-1

Introduction (vous pouvez le sauter)

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

Un simple aliascomme rm=safe-rm -i pourrait suffire, mais rm -rfne fonctionnerait pas, car -iest écrasé par -f.

Donc, nous devons nous assurer que cela -ivient toujours après -f!


Ma solution (3 étapes):

  • Installez safe-rm: brew install safe-rm

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

  • Editez votre ~/.profile(ou bash_profile ou autre) et mettez l'extrait de code suivant (qui contient un aliaset 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
    }
    
  • Enfin , logoutet login, de sorte que les mises à jour dans le .profile sont appliquées. NE L'UTILISEZ PAS avant une déconnexion / connexion!


Remarques:

  • Il peut être appliqué à n’importe quelle distribution Linux, avec de légères modifications.
  • Il ne déplace pas votre personnel à thrash. Il vous demande juste avant de supprimer chaque fichier!
  • Cela fonctionne avec -rfet avec les regex.
  • Si vous voulez vraiment utiliser rm -rf SANS demander à chaque fichier / dossier, vous pouvez toujours l'utiliser /bin/rm -rf(ou safe-rm -rfsi vous l'aviez installé).
  • Pas plus involontaire rm -rf ou rm * ;)
Paschalis
la source
5
Faire référence à quelque chose de plus grand que lui-même (par exemple alias rm='sudo rm') revient à attacher un Uzi à un couteau de cuisine: un jour, vous obtiendrez plus que ce que vous avez prévu de faire lorsque vous couperez cet ananas. Le fait de faire référence à quelque chose de plus petit que lui-même (par exemple alias rm='rmtrash') revient à laisser vos enfants jouer avec des grenades à main désarmées et à ne pas leur apprendre ce qu’ils sont réellement: un jour, quand ils en rencontreront un véritable, ils ne le traiteront pas avec la prudence appropriée. Quoi qu'il en soit, l'aliasing rm est mauvais pour votre sécurité personnelle et votre santé publique!
Caleb
2
Utiliser quelque chose comme safe-rm est un conseil raisonnable. L'aliasing à rm n'est pas. Utilisez-le sous son propre nom ou sous un alias unique afin de ne pas prendre pour acquis un filet de sécurité qui ne sera pas toujours là.
Caleb
Je vois ce que tu veux dire. MAIS, la raison pour laquelle je l’ai fait, c’est que je travaille avec de nombreux terminaux, certains terminaux distants et certains locaux. Et je veux lancer beaucoup de grenades sur les terminaux distants, mais quand je tire accidentellement le sceau de sécurité du terminal local, je veux voir un avertissement avant que l' explosion se produise.
Paschalis
@Paschalis et que se passe-t-il si un script ou un programme installé doit être utilisé rm? En outre, l'argument de Caleb est encore plus valable: si vous vous habituez à un système avec safe-rm alias, vous risquez de devenir imprudent avec ce système et de l'utiliser éventuellement sur un système avec un rm sans alias.
Manishearth