-
Notifications
You must be signed in to change notification settings - Fork 0
/
TooLongPathCli.py
85 lines (76 loc) · 3.16 KB
/
TooLongPathCli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# -*- coding: utf-8 -*-
"""
Created on Thu Jan 11 17:56:30 2018
@author: Qaisar.Tanvir
NOTE:
Intent of this code script is just solve a windows error and correct it. Any users who use it are soley responsible for any potential harm caused to any person machine or object.
Additionally, this code comes under No Harm License, For further details read the license file in the repo.
Any malicious use of this code by any user/person is not the authors responsibility in any capacity. Those malicious users/people will be soley responsible in any court of law
PLEASE BEAWARE OF ANY MISUSE
"""
import os
import shutil
import sys
import argparse
# initiate the parser
parser = argparse.ArgumentParser()
parser.add_argument("-rm", "--remove", help="Removes too long folders", action="store_true")
parser.add_argument("-cp", "--copy", help="Copies too long source folder items to destination folder", action="store_true")
parser.add_argument("-cr", "--create", help="Makes recusive folders inside a folder", action="store_true")
parser.add_argument("-src", "--source", help="Source path of the folder")
parser.add_argument("-dst", "--destination", help="Destination path of the folder")
parser.add_argument("-f_name", "--folder_name", help="Folder Name, Dont use special characters")
# read arguments from the command line
args = parser.parse_args()
# Remove directory which has too long path recursively
def remove_dir(path):
abs_path = os.path.abspath(path)
ext_path = r"\\?\%s" % abs_path
try:
print(ext_path)
shutil.rmtree(ext_path)
except FileNotFoundError:
print("The system cannot find the path specified: '%s'" % path)
# Copy too long directory tree from one folder to other
def copytree(src, dst, symlinks=False, ignore=None):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
s = r"\\?\%s" % s
d = r"\\?\%s" % d
print("Copying :" + s)
if os.path.isdir(s):
shutil.copytree(s, d, symlinks, ignore)
else:
shutil.copy2(s, d)
# Making recursive directories (to experiment too long paths)
def makedirs(dst_path, name, iterations):
abs_path = os.path.abspath(dst_path)
#dir_name = path.split("\\")[-1] # Last name if absolute path
ext_path = r"\\?\%s" % abs_path
for _ in range(iterations):
ext_path += r"\%s" % name
try:
os.makedirs(ext_path)
except FileExistsError:
print('Directory already exists')
# for deletion
if args.remove and args.source:
print("Remove scripts started")
rmv_path = str(args.source)
remove_dir(rmv_path)
# for copy
if args.copy and args.source and args.destination:
print("Copy scripts started")
src_path = str(args.source)
dst_path = str(args.destination)
copytree(src_path, dst_path)
# for create
if args.create and args.destination:
print("Create scripts started")
dst_path = str(args.destination)
if args.folder_name is NULL:
dir_name = "Delete me if you can"
else:
dir_name = str(args.folder_name)
makedirs(dst_path, dir_name, 500)