-
Notifications
You must be signed in to change notification settings - Fork 0
/
make_links.py
64 lines (53 loc) · 2.39 KB
/
make_links.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
import os
import re
import subprocess
import argparse
def create_hard_links(src_directory, dest_directory, regexes=None,endswith=None):
# lets clean up a little bit
regexes = [re.compile(pattern) for pattern in regexes] if regexes else []
endswith = endswith or []
src_directory = src_directory.replace('/','\\')
dest_directory = dest_directory.replace('/','\\')
# Ensure the destination directory exists
if not os.path.exists(dest_directory):
os.makedirs(dest_directory)
# Iterate through files in the source directory
for root, _, files in os.walk(src_directory):
for filename in files:
file_path = os.path.join(root, filename)
ok = True
for ew in endswith:
if not file_path.endswith(ew):
ok = False
break
for rx in regexes:
if not rx.match(filename):
ok = False
break
if ok:
# Construct the destination path
dest_path = os.path.join(dest_directory, filename)
# Create a hard link using mklink /H
try:
cmd = ["mklink", "/H", dest_path, file_path]
# print('CMD: ', cmd)
subprocess.run(cmd, shell=True, check=True)
print(f"Created hard link: {dest_path} -> {file_path}")
except subprocess.CalledProcessError as e:
print(f"Failed to create hard link: {e}")
except Exception as e:
print(f"An error occurred: {e}")
def main(args):
ret = 0
parser = argparse.ArgumentParser(description="Create hard links for files matching regex patterns.")
parser.add_argument("--src-directory", required=True, help="Source directory path")
parser.add_argument("--dest-directory", required=True, help="Destination directory path")
parser.add_argument("--regexes", nargs="+", required=False, help="List of regex patterns to filter files")
parser.add_argument("--endswith", nargs="+", required=False, help="List of endswith patterns to filter files")
args = parser.parse_args(args)
create_hard_links(args.src_directory, args.dest_directory, args.regexes, args.endswith)
return ret
if __name__ == "__main__":
import sys
args = sys.argv[1:]
sys.exit(main(args))