Le fichier est-il récupérable?
Réponse courte: Pas habituellement.
@Mark Plotnick souligne dans les commentaires que vous pouvez récupérer des .py
fichiers en .pyc
utilisant Uncompyle . Cela devrait être parfait pour votre situation.
En général, cependant, c'est beaucoup plus difficile. Théoriquement, vous pouvez utiliser des outils de criminalistique pour restaurer des fichiers. Le plus simple que j'ai utilisé est probablement testdisk
(alias "PhotoRec"). Cela ne fonctionne que parfois et c'est un processus lent. Cela n'en vaut généralement pas la peine, alors oui, c'est possible , mais la vraie réponse est «non».
Peut > être modifié pour ne pas écraser les exécutables?
Non. Il n'existe aucun moyen standard de dire au shell de ne jamais rediriger uniquement pour les fichiers marqués comme exécutables. Il y a "noclobber" qui empêchera la redirection vers des fichiers existants, exécutables ou non, mais voyez mes commentaires à ce sujet ci-dessous.
Que faire à l'avenir?
Cela peut sembler idiot, mais pour éviter de futures erreurs, vous n'avez probablement rien à faire. Je parie que vous avez déjà appris cette leçon.
J'utilise et enseigne Unix depuis très longtemps et même si les gens font souvent cette erreur une fois, ils la répètent rarement. Pourquoi pas? Probablement pour la même raison qu'une personne expérimentée avec des couteaux ne se coupe pas: les humains sont bons à apprendre. Finalement, faire la bonne chose devient une seconde nature.
Utilisez un éditeur de texte qui effectue des sauvegardes pour vous. Par exemple, si vous utilisez emacs
, la version précédente de votre programme est enregistrée dans mac_ip.py ~. D'autres éditeurs peuvent être configurés pour fonctionner de manière similaire (par exemple, "définir la sauvegarde" dans .nanorc
). Pour les éditeurs qui ne prennent pas en charge les sauvegardes automatiques, vous pouvez créer une fonction simpliste dans votre .bashrc:
myeditor() { cp -p "$1" "$1~"; editor "$1"; }
Faites-en facilement des copies. Par exemple, dans le répertoire du projet sur lequel vous travaillez, vous pourriez avoir un Makefile avec une cible comme celle-ci:
# Use `make tar` to backup all files in this directory.
# Tar filename will be ../<currentdirectory>-<date>.tar.gz
DIRNAME = $(shell basename `pwd`)
TIMESTAMP = $(shell date +%s)
tar:
@echo "[Tarring up ${DIRNAME}.tar.gz]"
(cd .. ; tar -zcvf "${DIRNAME}-${TIMESTAMP}.tar.gz" "${DIRNAME}")
(Remarque: stackexchange attribue de manière erronée les TAB ci-dessus à 4 espaces.)
De même, vous pouvez créer une cible Makefile qui fait un rsync
à un hôte Unix distant que vous avezssh
accès. (Utilisez-le ssh-copy-id
pour que votre mot de passe ne vous soit pas demandé à plusieurs reprises.)
Utilisez git
. Il existe de nombreux excellents didacticiels pour commencer. Essayez man gittutorial
, man gittutorial-2
etman giteveryday
. La configuration de votre propre référentiel git n'est pas difficile, mais vous pouvez également créer un référentiel distant sans frais sur github.com
Si les solutions ci-dessus sont trop lourdes, vous pouvez enregistrer de petits scripts sur gist.github.com . Bien qu'il soit possible de coller ou de télécharger à partir d'un navigateur Web, je recommande d'utiliser un interface gist en ligne de commande pour rendre les choses super faciles.
Je déconseille fortement d'utiliser "noclobber".
Oui, si vous le souhaitez, vous pouvez le faire set -o noclobber
, vous obtiendrez des messages d'erreur chaque fois que vous essayez d'écraser un fichier existant. C'est une mauvaise idée, à mon avis.*
Il fait fonctionner le shell d'une manière non standard sans aucune indication visible s'il est activé. Vous devez utiliser une syntaxe différente pour faire des choses normales. Pire encore, si vous vous habituez au noclobber, un jour vous utiliserez une autre machine Unix sans noclobber et ce genre d'accident pourrait se reproduire.
Comme vous le savez probablement, le shell Unix a été conçu pour être un outil pointu pour les experts. Il est rapide à utiliser et ne vous gênera pas - et il vous coupera si vous oubliez quelle extrémité est pointue. Mais, plus vous l'utilisez, plus je pense que vous apprécierez que cela puisse être une bonne chose.
* Note de bas de page: prenez peut-être mes opinions avec un grain de sel. Je suis aussi le genre de personne qui pense que les roues d'entraînement à vélo sont une mauvaise idée.
set -o noglobber
et bash ne redirigera plus vers les fichiers existants. Voir ici pour plus de détails: cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html