Tool to delete/remove log/exec folders
This commit is contained in:
105
anduril/anduril-remove-files
Executable file
105
anduril/anduril-remove-files
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/python
|
||||
import sys
|
||||
import os,shutil
|
||||
import re
|
||||
|
||||
from argparse import ArgumentParser
|
||||
|
||||
LOGFILE="_global"
|
||||
EXECFILE="_state"
|
||||
|
||||
def setup_options():
|
||||
parser=ArgumentParser(description="Remove execution folders recusively")
|
||||
parser.add_argument("-l",action="store_true",dest="logs",default=False,
|
||||
help="Search for log folders [%(default)s]")
|
||||
parser.add_argument("-e",action="store_true",dest="execs",default=False,
|
||||
help="Search for execution folders [%(default)s]")
|
||||
parser.add_argument("-f",action="store_true",dest="force",default=False,
|
||||
help="Force deletion, otherwise just lists the entries. WARNING: THIS OPTION DELETES FILES RECURSIVELY WITHOUT ASKING. [%(default)s]")
|
||||
parser.add_argument("-L",action="store_true",dest="symlinks",default=False,
|
||||
help="Follow symbolic links [%(default)s]")
|
||||
parser.add_argument("-m",type=str,action='store',dest="move",default="",
|
||||
help="Move folders to a given subfolder, instead of deleting. WARNING: MOVES FILES WITHOUT ASKING. Moving is only sensible within the same filesystem.")
|
||||
parser.add_argument('startpath', action="store",default='.', nargs='?')
|
||||
|
||||
options=parser.parse_args()
|
||||
if options.move!="":
|
||||
options.force=False
|
||||
if not options.move.endswith("/"):
|
||||
options.move+="/"
|
||||
if (not options.logs) and (not options.execs):
|
||||
print("Nothing to do, not printing logs, nor execution folders")
|
||||
sys.exit(1)
|
||||
return options
|
||||
|
||||
|
||||
def delete_folder(folder):
|
||||
# Delete folder if it exists
|
||||
if os.path.exists(folder):
|
||||
shutil.rmtree(folder)
|
||||
|
||||
def move_folder(folder,options):
|
||||
# Move a folder to a location, with folder name flattened /->_
|
||||
if not os.path.exists(options.move):
|
||||
os.makedirs(options.move)
|
||||
new_name=folder
|
||||
while new_name.startswith(".") or new_name.startswith("/"):
|
||||
new_name=new_name[1:]
|
||||
new_name=new_name.replace("/","_")
|
||||
sys.stdout.write(new_name)
|
||||
new_name=os.path.join(options.move,new_name)
|
||||
if os.path.exists(new_name):
|
||||
sys.stdout.write(" Folder already exists! Not moving.")
|
||||
return
|
||||
shutil.move(folder, new_name)
|
||||
|
||||
def recurse(options):
|
||||
|
||||
for path,dirs,files in os.walk(options.startpath,followlinks=options.symlinks):
|
||||
# do not move files in move folder a second time..
|
||||
if options.move!="":
|
||||
if os.path.samefile(options.move, path):
|
||||
del dirs[:]
|
||||
continue
|
||||
take_action=False
|
||||
if options.logs:
|
||||
if LOGFILE in files:
|
||||
take_action=True
|
||||
if EXECFILE in files:
|
||||
del dirs[:]
|
||||
# never descend in to execution directories
|
||||
if options.execs:
|
||||
take_action=True
|
||||
|
||||
if take_action:
|
||||
del dirs[:]
|
||||
sys.stdout.write(path)
|
||||
# only one of the following will be true:
|
||||
if options.force:
|
||||
sys.stdout.write(" Deleting")
|
||||
delete_folder(path)
|
||||
if options.move!="":
|
||||
sys.stdout.write(" -> "+options.move)
|
||||
move_folder(path,options)
|
||||
sys.stdout.write("\n")
|
||||
else:
|
||||
#Recurse with cleaned out dirs
|
||||
dirs.sort()
|
||||
dirs=clean_dirs(dirs)
|
||||
|
||||
return
|
||||
|
||||
def clean_dirs(dirs):
|
||||
# removes hidden folders
|
||||
for s in dirs[:]:
|
||||
if (s.startswith(".")):
|
||||
dirs.remove(s)
|
||||
return dirs
|
||||
|
||||
def main():
|
||||
options=setup_options();
|
||||
recurse(options)
|
||||
sys.exit(0)
|
||||
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user