Czy plik można odzyskać?
Krótka odpowiedź: zwykle nie.
@Mark Plotnick wskazuje w komentarzach, że możesz odzyskać .py
pliki .pyc
przy użyciu Uncompyle . To powinno być idealne dla twojej sytuacji.
Ogólnie jednak jest to o wiele trudniejsze. Teoretycznie możesz użyć narzędzi kryminalistycznych do usunięcia plików. Prawdopodobnie najłatwiejszy, z jakiego korzystałem testdisk
(aka „PhotoRec”). Działa tylko czasami i jest to powolny proces. Zwykle nie jest tego warte, więc tak, jest to możliwe , ale prawdziwą odpowiedzią jest „nie”.
Czy można zmienić >, aby nie zastępować plików wykonywalnych?
Nie. Nie ma standardowego sposobu, aby powiedzieć powłoce, aby nigdy nie przekierowywała tylko dla plików oznaczonych jako wykonywalne. Istnieje „noclobber”, który zapobiegnie przekierowywaniu do istniejących plików, wykonywalnych lub nie, ale zobacz moje komentarze na ten temat poniżej.
Co robić w przyszłości?
Może to zabrzmieć głupio, ale aby zapobiec przyszłym błędom, prawdopodobnie nie musisz nic robić. Założę się, że już nauczyłeś się tej lekcji.
Używam i uczę Uniksa od bardzo dawna i chociaż ludzie często popełniają ten błąd raz, rzadko go powtarzają. Dlaczego nie? Prawdopodobnie z tego samego powodu, że osoba doświadczona z nożami się nie tnie: ludzie są dobrzy w nauce. W końcu robienie właściwych rzeczy staje się drugą naturą.
Użyj edytora tekstu, który tworzy dla Ciebie kopie zapasowe. Na przykład, jeśli używasz emacs
, poprzednia wersja twojego programu jest zapisywana w mac_ip.py ~. Inne edytory można skonfigurować tak, aby działały podobnie (np. „Ustaw kopię zapasową” w .nanorc
). W przypadku edytorów, które nie obsługują automatycznych kopii zapasowych, możesz uprościć funkcję .bashrc:
myeditor() { cp -p "$1" "$1~"; editor "$1"; }
Ułatw sobie wykonywanie kopii. Na przykład w katalogu projektu, nad którym pracujesz, możesz mieć Makefile z celem takim jak ten:
# 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}")
(Uwaga: stackexchange źle podaje tabele powyżej jako 4 spacje).
Podobnie możesz utworzyć cel Makefile, który robi rsync
zdalny host Unix, do którego masz ssh
dostęp. (Użyj ssh-copy-id
, abyś nie był wielokrotnie proszony o podanie hasła).
Zastosowanie git
. Na początek jest wiele doskonałych samouczków. Spróbuj man gittutorial
, man gittutorial-2
a man giteveryday
. Utworzenie własnego repozytorium git nie jest trudne, ale możesz również utworzyć zdalne repozytorium bez żadnych kosztów na github.com
Jeśli powyższe rozwiązania są zbyt ciężkie, możesz zapisać małe skrypty na gist.github.com . Chociaż możliwe jest wklejenie lub przesłanie z przeglądarki internetowej, zalecam użycie interfejsu gist z wiersza poleceń, aby wszystko było super łatwe.
Zdecydowanie odradzam używanie „noclobber”.
Tak, jeśli wybierzesz, możesz to zrobić, set -o noclobber
aby otrzymywać komunikaty o błędach za każdym razem, gdy próbujesz zastąpić istniejący plik. To jest, moim zdaniem, zły pomysł. *
Powoduje, że powłoka działa w niestandardowy sposób bez widocznego wskazania, czy jest włączona. Musisz używać innej składni do robienia normalnych rzeczy. Co najgorsze, jeśli przyzwyczaisz się do noclobbera, pewnego dnia użyjesz innej maszyny uniksowej bez noclobbera i taki wypadek może się powtórzyć.
Jak zapewne wiesz, powłoka uniksowa została zaprojektowana jako ostre narzędzie dla ekspertów. Jest szybki w użyciu i nie przeszkadza - i cię cię, jeśli zapomnisz, który koniec jest spiczasty. Ale im częściej go używasz, tym bardziej myślę, że docenisz, że może to być dobra rzecz.
* Przypis: być może wezmę moje opinie z odrobiną soli. Jestem także osobą, która uważa koła treningowe za rower za zły pomysł.
set -o noglobber
a bash nie będzie już przekierowywać do istniejących plików. Zobacz szczegóły: cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html