Skip to content

Instantly share code, notes, and snippets.

@l1x
Last active March 29, 2021 07:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save l1x/01291163ea46b7aa4e0a6278c2b439bc to your computer and use it in GitHub Desktop.
Save l1x/01291163ea46b7aa4e0a6278c2b439bc to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import os
import hashlib
import sys
def get_folders(folder):
ret = []
for root, subdirs, _files in os.walk(folder):
for subdir in subdirs:
ret.append(f"{root}/{subdir}")
return ret
def get_files(folder):
ret = []
for root, _subdirs, files in os.walk(folder):
for f in files:
ret.append(f"{root}/{f}")
return ret
def sort_folders(folders):
return sorted(folders, key=lambda k: k.count('/'), reverse=True)
def get_safe_file_name(filename):
keepcharacters = ('.','_', '/')
return "".join(c for c in filename if c.isalnum() or c in keepcharacters).rstrip()
def rename_bad_folders(folders):
for folder in folders:
subfolders = folder.split(os.path.sep)
top = subfolders[:-1]
bottom = subfolders[-1]
safe_bottom = get_safe_file_name(bottom)
new_list = top + [ safe_bottom ]
new_name = os.path.sep.join(new_list)
if folder == new_name:
print(f'{folder} is ok')
else:
print(f'renaming: {folder}')
try:
if not os.path.exists(new_name):
os.rename(folder, new_name)
else:
os.rename(folder, f"{new_name}_._")
except Exception as ex:
print(f"Error while processing file: {folder}")
print(ex)
sys.exit(1)
return 'ok'
def get_sha_sum(fname):
hash_sha3 = hashlib.sha3_256()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_sha3.update(chunk)
return hash_sha3.hexdigest()
def rename_files(files):
try:
for f in files:
if f != sys.argv[0]:
os.rename(f, f"sha3-{get_sha_sum(f)}{os.path.splitext(f)[1]}")
else:
print('ok')
except Exception as ex:
print(f"Error while processing file: {f}")
print(ex)
sys.exit(1)
def delete_empyt_folders(folders):
try:
for folder in folders:
os.removedirs(folder)
except Exception as ex:
print(f"Error while processing file: {folder}")
print(ex)
def main():
old_folders = sort_folders(get_folders("."))
for i in old_folders:
print(i)
rename_bad_folders(old_folders)
new_folders = sort_folders(get_folders("."))
for i in old_folders:
print(i)
files = get_files(".")
rename_files(files)
delete_empyt_folders(new_folders)
if __name__ == '__main__':
exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment