Un substitut sûr pour OS X `rm`?


9

J'ai l'habitude de devoir rmalias quelque chose de plus sûr.

J'utilise osx-trash, mais une fois que je suis passé à Ruby 1.9.2, cela ne fonctionne plus.

Je connais trash-cliPython, mais je préférerais de loin quelque chose qui déplace les fichiers vers le dossier Corbeille sous OS X plutôt qu'un autre répertoire.

Quelqu'un at-il une bonne solution?


9
S'il vous plaît, ne vous habituez pas à un alias rm, mais plutôt vous y habituer mv files/to/be/deleted ~/.Trash. Il est sûr et cohérent sur tous les systèmes.
— Asmus

Asmus: Vous voyez que cela ne fonctionne que si votre mac n'a qu'une seule partition. Si vous avez une autre partition, passer à ~ / .Trash n'est pas vraiment correct (ma ~ partition n'est pas assez grande).
— disparu le

1
Eh bien, vous auriez dû mentionner dans votre question que vous avez plusieurs partitions!
— slhck

1
disparu: eh bien, je pense que mvc'est toujours votre pari le plus sûr. Vous pouvez facilement créer un nouveau dossier sur votre autre partition appelée Trash(ou comme vous l'aimez), puis mvles fichiers là-bas. Une fois que vous êtes sûr qu'ils peuvent être supprimés, supprimez et recréez ce dossier complet.
— Asmus

puis vous pouvez simplement avoir ~ / .Trash être un lien logiciel vers le dossier Corbeille sur la partition qui a suffisamment d'espace
— AlcubierreDrive

Réponses:


8

Pour OSX, vous pouvez utiliser safe-rm

brew install safe-rm

Vous devez faire une étape supplémentaire pour la préférer à la valeur par défaut rm- ajoutez un lien symbolique.

echo $PATH

Pour moi, j'ai d' /usr/local/bin:abord le même dir que l' safe-rminstallation

Ajouter un lien symbolique vers safe-rm

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

Pour supprimer et restaurer la valeur par défaut, rmvous pouvez supprimer le lien symboliquerm /usr/local/bin/rm

Le fichier de configuration peut être ajouté à /etc/safe-rm.conf

par exemple:

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

Tester avec rm -rf /testlui refusera la suppression desafe-rm.conf


pourrait être bon d'ajouter également /à la liste des chemins qui ne devraient pas être supprimés pour empêcher rm classique -fr /
— Mikael Lepistö

3

hasseg.org/trash est un utilitaire Objective-C comme osx-trash .

J'ai écrit une fonction shell qui n'écrase pas les fichiers comme le mv * ~/.Trashferait. Cependant, il déplace toujours les éléments vers le volume de démarrage.

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
}

Oui, j'ai plus d'une partition et je voudrais conserver les fichiers supprimés dans la même partition plutôt que de les déplacer
— disparue le

J'ai ajouté des liens vers deux autres utilitaires et une autre fonction. Chacun d'eux doit conserver les fichiers sur la même partition.
— Lri

2

Introduction (vous pouvez l'ignorer)

Pour moi, ce rm -iserait suffisant, car cela vous invite à supprimer tout 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 il -iest annulé 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_BINà l'étape suivante

  • Modifiez votre ~/.profile(ou bash_profile ou autre), et mettez l'extrait de code suivant, (qui contient un aliaset 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 , logoutet login, les mises à jour du .profile sont donc 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.
  • Cela ne déplace PAS votre personnel au thrash. Il vous demande juste avant de supprimer chaque fichier!
  • Cela fonctionne avec -rfet avec des expressions rationnelles.
  • Si vous voulez vraiment utiliser rm -rf SANS être invité pour chaque fichier / dossier, vous pouvez toujours l'utiliser /bin/rm -rf(ou safe-rm -rfsi vous l'avez installé).
  • Pas plus involontaire rm -rf ou rm * ;)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.