Je viens de perdre quelques données dans le dossier A qui se trouvait dans le dossier B après l'avoir fait rm -rf B
. Avant de pouvoir réaliser ce que j'avais fait, c'était fini. Maintenant une leçon est apprise, je souhaite rendre certains de mes dossiers à l'abri des idiots pour éviter une prochaine fois quand je fais quelque chose de similaire et que je veux me tuer.
Une façon de penser est d'écrire une fonction bash et de l'aliaser rm
. Cette fonction recherchera dans chaque sous-dossier un fichier caché tel que .dontdelete
. Une fois trouvé, il me demanderait si je veux vraiment continuer. Je ne peux pas faire est protégé en écriture car il existe un processus qui écrit constamment dans ce dossier. Y a-t-il une meilleure façon de le faire?
la source
rm
pourrm -i
:> -i invite avant chaque suppression ou> -I invite une fois avant de supprimer plus de trois fichiers, ou lors de la suppression récursive. Moins intrusif que -i, tout en offrant une protection contre la plupart des erreurs. Vous pouvez à tout moment remplacer celles avec d'autres indicateurs.safe-rm
tmpwatch
pour supprimer les fichiers de ce dossier toutes les heures.Réponses:
En recherchant votre question, je suis tombé sur cette technique qui pourrait vous aider à l'avenir.
Vous pouvez apparemment toucher un fichier dans le répertoire comme ceci:
Maintenant, lorsque vous exécutez la commande
rm -fr *
dans un répertoire où le-i
est présent, l'invite interactive s'afficherm
.La même chose peut être obtenue en laissant simplement un alias en place pour
rm
toujours le fairerm -i
. Cela peut devenir ennuyeux. Si souvent, ce que j'ai vu, c'est d'avoir cet alias en place, puis de le désactiver lorsque vous voulez vraiment le supprimer sans y être invité.Maintenant, dans les répertoires, vous serez accueilli comme ceci:
Pour remplacer l'alias:
Cela ne s'arrête
rm -fr
cependant pas pour autant. Mais cela vous offre une certaine protection.Références
la source
--force
quelque chose, vous le pensez vraiment.rm -I
(majusculesi
) peut être utile dans un alias, car il est un peu moins intrusif (selon la page de manuel, ne vous invite que si vous supprimez plus de trois fichiers ou récursivement).touch ./-i
astuce ne fonctionne qu'avec GNUrm
et uniquement si la variable POSIXLY_CORRECT n'est pas définie (les commandes POSIX ne reconnaissent pas les options après les arguments).De nombreuses possibilités:
alias rm='rm -i'
- rm demandera - sauf si vous spécifiez-f
...chmod -w dir
- protège les fichiers directement dans ce répertoire.chattr +i
si tu le penses vraimentMais un meilleur moyen est probablement d'avoir une bonne sauvegarde et de conserver les données importantes dans une sorte de contrôle de version (comme
git
), ce qui apporte également de nombreux autres avantages.la source
rm -i
mais comme on pourrait s'y attendre, cela ne fonctionne pas avec l'-f
option. J'utilise git à de nombreuses autres fins, mais que se passe-t-il si je le fais accidentellementrm -rf *
aussi?Utilisez un logiciel de contrôle de version comme
git
pour encapsuler vos projets.Tant que vous ne supprimez pas un projet entier, vous devrez taper délibérément
rm -rf .*
pour supprimer le.git
répertoire et perdre toutes les données nécessaires à une restauration.Cela a l'avantage supplémentaire que vous pouvez pousser les sauvegardes de vos fichiers vers un serveur distant comme github ou bitbucket.
la source
Voici comment ça
rm -rf dir
marche:dir
et répertorie son contenu.unlink
le.Si vous pouviez, pour la liste des répertoires, renvoyer d'abord un nom de fichier spécial, et si vous pouviez faire
unlink
mourir un processus faisant un sur ce fichier, cela résoudrait le problème. Cela pourrait être fait en utilisant un système de fichiers fusible.Par exemple, vous pouvez adapter l'
loopback.pl
exemple du module perl Fuse qui implémente simplement un système de fichiers factice qui n'est qu'un passage vers un vrai système de fichiers en dessous (voir aussi le patch ci-dessous):.{{do-not-delete}}.
, ajoutez la liste des entrées avec deux fichiers:.{{do-not-delete}}!error
et.{{do-not-delete}}!kill
unlink
la première tentative , renvoyer leEPERM
code pourrm
afficher un message d'erreurunlink
le second, le processus est tué.Voici un patch à appliquer au dessus de cet
loopback.pl
exemple comme preuve de concept:la source
J'ai créé un script pour faciliter cette tâche. Le script shell modifie l'interaction de lecture / écriture et l'indicateur chattr d'une liste donnée de dossiers de manière interactive, sans demander le mot de passe root. Vous pouvez télécharger le fichier zip à partir du lien ci-dessous.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
J'ai également inclus un script d'installation pour faciliter la configuration. Les instructions sont incluses dans le fichier zip.
la source