O arquivo é recuperável?
Resposta curta: geralmente não.
@Mark Plotnick aponta nos comentários, você pode recuperar .py
arquivos de .pyc
usando Descompilar . Isso deve ser perfeito para sua situação.
Em geral, porém, isso é muito mais difícil. Teoricamente, você pode usar ferramentas forenses para recuperar arquivos. Provavelmente, o mais fácil que usei é o testdisk
(também conhecido como "PhotoRec"). Só funciona às vezes e é um processo lento. Geralmente não vale a pena, então, sim, é possível , mas a verdadeira resposta é "não".
Pode > ser alterado para não sobrescrever arquivos executáveis?
Não. Não existe uma maneira padrão de dizer ao shell para nunca redirecionar apenas os arquivos marcados como executáveis. Existe o "noclobber" que impedirá o redirecionamento para arquivos existentes, executáveis ou não, mas veja meus comentários sobre isso abaixo.
O que fazer no futuro?
-
Isso pode parecer bobo, mas para evitar erros futuros, você provavelmente não precisa fazer nada. Minha aposta é que você já aprendeu esta lição.
Eu venho usando e ensinando o Unix há muito tempo e enquanto as pessoas frequentemente cometem esse erro uma vez, elas raramente o repetem. Por que não? Provavelmente pela mesma razão, uma pessoa experiente com facas não se corta: os humanos são bons em aprender. Eventualmente, fazer a coisa certa se torna uma segunda natureza.
-
Use um editor de texto que faça backups para você. Por exemplo, se você usar emacs
, a versão anterior do seu programa será salva em mac_ip.py ~. Outros editores podem ser configurados para funcionar de maneira semelhante (por exemplo, "definir backup" em .nanorc
). Para editores que não suportam backups automáticos, você poderia fazer uma função simplista em seu .bashrc:
myeditor() { cp -p "$1" "$1~"; editor "$1"; }
-
Facilite para você fazer cópias. Por exemplo, no diretório do projeto em que você está trabalhando, você pode ter um Makefile com um destino como este:
# 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}")
(Nota: stackexchange está enganando as TABs acima como 4 espaços.)
-
Da mesma forma, você pode criar um destino Makefile que execute rsync
para um host Unix remoto ao qual você tenha acesso ssh
. (Use ssh-copy-id
para que você não receba sua senha repetidamente.)
-
Use git
. Existem muitos excelentes tutoriais sobre como começar. Experimente man gittutorial
, man gittutorial-2
e man giteveryday
. Configurar seu próprio repositório git não é difícil, mas você também pode criar um repositório remoto sem nenhum custo em github.com
-
Se as soluções acima forem muito pesadas, salve pequenos scripts em gist.github.com . Embora seja possível colar ou fazer o upload de um navegador da Web, recomendo usar uma interface de linha de comando para facilitar as coisas.
Desencorajo strongmente o uso de "noclobber".
Sim, se você escolher, poderá fazer set -o noclobber
para receber mensagens de erro sempre que tentar substituir um arquivo existente. Esta é uma má ideia, na minha opinião. *
Isso faz com que o shell funcione de maneira não padrão, sem indicação visível de que esteja habilitado. Você tem que usar uma sintaxe diferente para fazer coisas normais. Pior de tudo, se você se acostumar com o noclobber, algum dia usará outra máquina Unix sem noclobber e esse tipo de acidente poderá acontecer novamente.
Como você provavelmente sabe, o shell Unix foi projetado para ser uma ferramenta afiada para especialistas. É rápido de usar e não vai atrapalhar - e vai te cortar se você esquecer que final é pontudo. Mas, quanto mais você usa, mais eu acho que você vai perceber que isso pode ser uma coisa boa.
* Nota de rodapé: talvez tome minhas opiniões com um grão de sal. Eu também sou o tipo de pessoa que acha que as rodas de treinamento de bicicleta são uma má ideia.