summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar simon.parzer@f837bbade0d93f560dc574b04e835b7875c4026f <simonparzer@web>2016-05-05 12:01:46 +0000
committerGravatar admin <admin@branchable.com>2016-05-05 12:01:46 +0000
commit0af3a85ce668a5249eba40f759a8cd6773afe635 (patch)
treec57659de4406e7bfac5f67b19af37839f925e413
parent0846a12581b11080aebd409254a3add6056a7ecc (diff)
Added a comment: Python script to recover git annex' lost files
-rw-r--r--doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_7_24b09f1263f6bc6b219085c17ced915c._comment49
1 files changed, 49 insertions, 0 deletions
diff --git a/doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_7_24b09f1263f6bc6b219085c17ced915c._comment b/doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_7_24b09f1263f6bc6b219085c17ced915c._comment
new file mode 100644
index 000000000..c648d125d
--- /dev/null
+++ b/doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_7_24b09f1263f6bc6b219085c17ced915c._comment
@@ -0,0 +1,49 @@
+[[!comment format=mdwn
+ username="simon.parzer@f837bbade0d93f560dc574b04e835b7875c4026f"
+ nickname="simon.parzer"
+ subject="Python script to recover git annex' lost files"
+ date="2016-05-05T12:01:46Z"
+ content="""
+Maybe someone else needs this at some point :|
+
+Use it at your own risk of course.
+
+ #!python3
+
+ import os
+ import re
+ from shutil import copyfile
+
+ targets = {}
+
+ for path, dirs, files in os.walk('.'):
+ for f in files:
+ fp = os.path.join(path, f)
+ if fp.endswith('.py'): continue
+ fp_size = os.stat(fp).st_size
+ if fp_size < 72 or fp_size > 256: continue
+ with open(fp, 'r', encoding='latin1') as stream:
+ l = stream.readline()
+ hashmatch = re.match('.*SHA256E\-\w+\-\-(\w{16})', l)
+ if hashmatch:
+ targets[hashmatch.group(1)] = os.path.abspath(fp)
+
+ #print(targets)
+
+ target = os.path.abspath('.')
+ while not os.path.exists('.git/annex/objects'):
+ os.chdir('..')
+
+ for path, dirs, files in os.walk('.git/annex/objects'):
+ for f in files:
+ fp = os.path.join(path, f)
+ fp_size = os.stat(fp).st_size
+ if fp_size > 512:
+ hashmatch = re.match('.*SHA256E\-\w+\-\-(\w{16})', fp)
+ if hashmatch:
+ hash = hashmatch.group(1)
+ if hash in targets:
+ print(fp, '->', targets[hash])
+ copyfile(fp, targets[hash])
+
+"""]]