Можно ли восстановить файл?
Краткий ответ: обычно нет.
@Mark Plotnick указывает в комментариях, вы можете восстановить .py
файлы с .pyc
помощью Uncompyle . Это должно быть идеально подходит для вашей ситуации.
Но в целом все гораздо сложнее. Теоретически вы можете использовать криминалистические инструменты для восстановления файлов. Наверное, самое простое, что я использовал testdisk
(так называемый «PhotoRec»). Это работает только иногда, и это медленный процесс. Обычно это того не стоит, так что да, это возможно , но реальный ответ - «нет».
Можно ли > изменить не перезаписывать исполняемые файлы?
Нет. Не существует стандартного способа указать оболочке никогда не перенаправлять только файлы, помеченные как исполняемые. Существует «noclobber», который предотвращает перенаправление в существующие файлы, исполняемые или нет, но смотрите мои комментарии по этому вопросу ниже.
Что делать в будущем?
Это может звучать глупо, но, чтобы предотвратить будущие ошибки, вам, вероятно, ничего не нужно делать. Держу пари, что вы уже усвоили этот урок.
Я очень давно использую и преподаю Unix, и хотя люди часто делают эту ошибку один раз, они редко ее повторяют. Почему бы нет? Вероятно, по той же причине, по которой человек, имеющий опыт работы с ножами, не порезался: люди хорошо учатся. В конце концов, правильные поступки становятся второй натурой.
Используйте текстовый редактор, который делает резервные копии для вас. Например, если вы используете emacs
, предыдущая версия вашей программы сохраняется в mac_ip.py ~. Другие редакторы могут быть настроены для работы аналогичным образом (например, «установить резервную копию» в .nanorc
). Для редакторов, которые не поддерживают автоматическое резервное копирование, вы можете сделать упрощенную функцию в вашем .bashrc:
myeditor() { cp -p "$1" "$1~"; editor "$1"; }
Сделать это легко для себя, чтобы сделать копии. Например, в каталоге проекта, над которым вы работаете, у вас может быть Makefile с такой целью:
# 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}")
(Примечание: stackexchange неверно отображает вкладки выше как 4 пробела.)
Точно так же вы можете создать цель Makefile, которая обращается rsync
к удаленному хосту Unix, к которому у вас есть ssh
доступ. (Используйте, ssh-copy-id
чтобы вам не нужно было повторно запрашивать пароль.)
Использование git
. Есть много отличных учебников по началу работы. Попробуй man gittutorial
, man gittutorial-2
и man giteveryday
. Настроить свой собственный git-репозиторий несложно, но вы также можете бесплатно создать удаленный репозиторий на github.com.
Если приведенные выше решения имеют слишком большой вес, вы можете сохранить небольшие сценарии на gist.github.com . Хотя можно вставлять или загружать из веб-браузера, я рекомендую использовать интерфейс командной строки, чтобы упростить задачу.
Я настоятельно не рекомендую использовать "Noclobber".
Да, если вы выберете, вы можете сделать set -o noclobber
так, что вы будете получать сообщения об ошибках всякий раз, когда вы пытаетесь перезаписать существующий файл. На мой взгляд, это плохая идея. *
Это заставляет оболочку работать нестандартным способом без видимого указания, включена ли она. Вы должны использовать другой синтаксис для выполнения обычных вещей. Хуже всего то, что если вы привыкнете к noclobber, то когда-нибудь вы будете использовать другую Unix-машину без noclobber, и такого рода аварии могут произойти снова.
Как вы, наверное, знаете, оболочка Unix была разработана для того, чтобы стать хорошим инструментом для экспертов. Он быстрый в использовании и не будет мешать вам - и он порежет вас, если вы забудете, какой конец острый. Но чем больше вы его используете, тем больше я думаю, вы по достоинству оцените это.
* Сноска: возможно, примите мое мнение с недоверием. Я также человек, который считает велосипедные тренировочные колеса плохой идеей.
set -o noglobber
и bash больше не будет перенаправлять в существующие файлы. Подробности смотрите здесь: cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html