+ add CLI command support
* fix inode rename bug - removed pointless req files
This commit is contained in:
parent
b17f6656d4
commit
073980f17b
@ -3,13 +3,20 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
from . import nuke
|
||||
try:
|
||||
from . import nuke
|
||||
except ImportError:
|
||||
import nuke
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
path_to_del = sys.argv[1]
|
||||
except IndexError:
|
||||
sys.exit(1)
|
||||
if not os.path.exists(path_to_del):
|
||||
sys.stderr.write(f'Path {path_to_del} does not exist\n')
|
||||
sys.stderr.flush()
|
||||
sys.exit(2)
|
||||
if os.path.isfile(path_to_del):
|
||||
nuke.clean(path_to_del)
|
||||
else:
|
||||
|
@ -6,6 +6,8 @@ from typing import NewType
|
||||
|
||||
NewPath = NewType('NewPath', str)
|
||||
|
||||
DEFAULT_PASSES = 2
|
||||
|
||||
|
||||
def _overwrite_file(file_path: str, passes: int, zeros=False):
|
||||
"""overwrite a single file with secure random data passes times
|
||||
@ -20,7 +22,6 @@ def _overwrite_file(file_path: str, passes: int, zeros=False):
|
||||
|
||||
with open(file_path, 'wb') as top_secret_file:
|
||||
top_secret_file.write(new_data)
|
||||
print('wrote to', file_path)
|
||||
|
||||
|
||||
def _rename_inode(path_in: str, zeros=False) -> NewPath:
|
||||
@ -28,6 +29,9 @@ def _rename_inode(path_in: str, zeros=False) -> NewPath:
|
||||
name_len = len(os.path.basename(path_in))
|
||||
new_name = ''
|
||||
path = os.path.abspath(path_in)
|
||||
dir_n = os.path.dirname(path_in)
|
||||
if dir_n:
|
||||
dir_n += '/'
|
||||
|
||||
if zeros:
|
||||
new_name = '0' * name_len
|
||||
@ -35,15 +39,15 @@ def _rename_inode(path_in: str, zeros=False) -> NewPath:
|
||||
for _ in range(name_len):
|
||||
new_name += secrets.choice(string.ascii_letters)
|
||||
|
||||
os.rename(path, new_name)
|
||||
os.rename(path, dir_n + new_name)
|
||||
|
||||
return new_name
|
||||
return dir_n + new_name
|
||||
|
||||
|
||||
def _nuke(path: str):
|
||||
def _nuke(path: str, passes: int = DEFAULT_PASSES):
|
||||
"""properly delete inode"""
|
||||
if os.path.isfile(path):
|
||||
_overwrite_file(path, 1)
|
||||
_overwrite_file(path, passes)
|
||||
new_path = _rename_inode(path)
|
||||
os.remove(new_path)
|
||||
else:
|
||||
@ -51,15 +55,14 @@ def _nuke(path: str):
|
||||
shutil.rmtree(new_path)
|
||||
|
||||
|
||||
def clean_tree(directory: str):
|
||||
def clean_tree(directory: str, passes: int = DEFAULT_PASSES):
|
||||
"""securely delete dir tree"""
|
||||
|
||||
for root, dirs, files in os.walk(directory, topdown=False):
|
||||
for name in files:
|
||||
_nuke(os.path.join(root, name))
|
||||
for name in dirs:
|
||||
_nuke(os.path.join(root, name))
|
||||
_nuke(root)
|
||||
_nuke(directory)
|
||||
|
||||
|
||||
def clean(path: str):
|
||||
|
@ -1,6 +0,0 @@
|
||||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# pip-compile --generate-hashes --output-file=requirements.txt requirements.in
|
||||
#
|
Loading…
Reference in New Issue
Block a user