-
Notifications
You must be signed in to change notification settings - Fork 0
/
SharedDrivesMigration.py
75 lines (51 loc) · 2.82 KB
/
SharedDrivesMigration.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
### Program set-up #####
# enter path that holds the files/sub-folders that are supposed to be moved here:
src = "ENTER PATH HERE LIKE H:/My Drive/operationalstuff"
# enter exact path where files and sub-folders should be moved to here:
dst = "ENTER PATH HERE LIKE H:/Shared drives/Operations/german_chapter"
# specify if (sub-)folders at source-location which have been moved with all content should be deleted afterwards
# RECOMMEND LEAVING THIS TRUE - helps identifying locations from which files couldn't be moved (due to missing ownership rights)
deleteemptyfolders = True
## PARAMETER-DOUBLECHECK: Are you sure you have correctly specified all parameters? -> If yes, set this to True
parameter_check = False
##############################
### program code below - edit only if you know what you are doing
import os, shutil, delete_empty_folders
def moving_contents(src, dst):
error_list = []
for root, directories, files in os.walk(src, topdown=True):
for name in directories:
sub_dir = os.path.join(root, name).replace(src, dst)
# create copied folder in destination-structure
if not os.path.exists(sub_dir):
os.mkdir(sub_dir)
for name in files:
# move file to destination
src_file = os.path.join(root, name)
dst_file = os.path.join(root, name).replace(src, dst)
# since some files can only be moved with copy paste and others only with cut paste, we will try both methods
# cut-paste (ctrl + x) is much faster since it doesnt require downloading the files in the back - so it's tried first
try:
# method equals ctrl + x
os.rename(src_file, dst_file)
print(f"Successfully moved {name} to {dst_file}!")
except:
try:
# recursively use copy-function (this will help copying all the non-google-format files with other owners, e.g. PDFs and so on...
shutil.move(src_file, dst_file)
print(f"Successfully copied {name} to {dst_file}!")
os.remove(src_file)
# files that cannot be moved (other owners AND gooogle-format-files) simply stay in their original place - there is no file loss here
except:
error_list.append(src_file)
if error_list:
print(f"{len(error_list)} files could not be moved.")
print("Finished moving all files with owner-rights from {src} to {dst}.")
return ""
if parameter_check:
if __name__ == '__main__':
moving_contents(src, dst)
if deleteemptyfolders:
delete_empty_folders.remove_empty_folders([src, dst])
else:
print("Parameter-Doublecheck isn't set to True, please set your parameters, set doublecheck to True and run again!")