Repository navigation
Expand file tree
/
Copy pathflatten_subfolders.py
More file actions
57 lines (42 loc) · 1.46 KB
/
Copy pathflatten_subfolders.py
File metadata and controls
57 lines (42 loc) · 1.46 KB
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
import os
import shutil
import sys
from mtlogger import logger
from mtprompt import Prompt
PREPEND_PARENT = True
def main():
if len(sys.argv) > 1:
parent_dir = sys.argv[1]
else:
parent_dir = Prompt.dir(
'Enter the path to the directory containing the folders you want to flatten'
)
flatten_subfolders(parent_dir)
def flatten_subfolders(parent_dir: str):
logger.log(f'Flattening subfolders in "{parent_dir}"...')
for root, dirs, _ in os.walk(parent_dir):
for dir_name in dirs:
dir_path = os.path.join(root, dir_name)
for sub_root, _, sub_files in os.walk(dir_path, topdown=False):
for file_name in sub_files:
src_path = os.path.join(sub_root, file_name)
if PREPEND_PARENT:
parent_name = os.path.basename(sub_root)
dest_path = os.path.join(root, f'{parent_name} - {file_name}')
else:
dest_path = os.path.join(root, file_name)
if os.path.exists(dest_path):
logger.warn(f'Skipping "{src_path}". "{dest_path}" already exists.')
continue
shutil.move(src_path, dest_path)
if os.listdir(sub_root):
logger.warn(f'Not deleting "{sub_root}" because it is not empty.')
else:
os.rmdir(sub_root)
logger.success(f'Finished flattening subfolders in "{parent_dir}".')
if __name__ == '__main__':
try:
main()
except Exception as ex:
logger.unhandled_error(ex)
Prompt.enter_to_exit()