O arquivo é recuperável?
Resposta curta: geralmente não.
O @Mark Plotnick aponta nos comentários, você pode recuperar .py
arquivos .pyc
usando o Uncompyle . Isso deve ser perfeito para a sua situação.
Em geral, porém, isso é muito mais difícil. Teoricamente, você pode usar ferramentas forenses para recuperar arquivos excluídos. Provavelmente, o mais fácil que já usei é testdisk
(também conhecido como "PhotoRec"). Às vezes, funciona apenas e é um processo lento. Geralmente não vale a pena, então, sim, é possível , mas a resposta real é "não".
> Pode ser alterado para não sobrescrever executáveis?
Não. Não existe uma maneira padrão de dizer ao shell para nunca redirecionar apenas para arquivos marcados como executáveis. Há "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 bobagem, mas para evitar erros futuros, você provavelmente não precisará fazer nada. Minha aposta é que você já aprendeu esta lição.
Eu uso e ensino o Unix há muito tempo e, embora as pessoas cometam esse erro uma vez, raramente o repetem. Por que não? Provavelmente pela mesma razão que 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 oferecem suporte a backups automáticos, você pode fazer uma função simplista no 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á processando incorretamente as TABs acima como 4 espaços.)
Da mesma forma, você pode criar um destino Makefile que faz um rsync
host Unix remoto ao qual você tem ssh
acesso. (Use ssh-copy-id
para não ser solicitada sua senha repetidamente.)
Use git
. Existem muitos tutoriais excelentes para começar. Tente 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 no github.com
Se as soluções acima forem muito pesadas, você pode salvar pequenos scripts no gist.github.com . Embora seja possível colar ou fazer upload de um navegador da Web, eu recomendo usar uma interface de essência da linha de comando para tornar as coisas super fáceis.
Eu desencorajo fortemente o uso de "noclobber".
Sim, se você escolher, set -o noclobber
poderá receber mensagens de erro sempre que tentar sobrescrever um arquivo existente. Esta é uma má ideia, na minha opinião. *
Faz com que o shell funcione de maneira não padrão, sem indicação visível se está ativado. Você precisa usar uma sintaxe diferente para fazer coisas normais. O pior de tudo é que, se você se acostumar com o noclobber, algum dia usará outra máquina Unix sem o 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 atrapalha o seu caminho - e vai te cortar se você esquecer qual extremidade é pontuda. Mas, quanto mais você o usa, mais eu acho que você apreciará 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á idéia.
set -o noglobber
e o bash não será mais redirecionado para os arquivos existentes. Veja aqui para detalhes: cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html