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
|
#!@PYTHON@
# mass-link.py
# USAGE: mass-link.py [--prepend-suffix SUFFIX] symbolic | hard SOURCEDIR DESTDIR FILES
#
# create hard or symbolic links to SOURCEDIR/FILES in DESTDIR
#
# If --prepend-suffix is specified, link to foo.bar will be called fooSUFFIX.bar.
# Shell wildcards expansion is performed on FILES.
import sys
import os
import glob
import getopt
print "mass-link.py"
optlist, args = getopt.getopt (sys.argv[1:], '', ['prepend-suffix='])
link_type, source_dir, dest_dir = args[0:3]
files = args[3:]
source_dir = os.path.normpath (source_dir)
dest_dir = os.path.normpath (dest_dir)
prepended_suffix = ''
for x in optlist:
if x[0] == '--prepend-suffix':
prepended_suffix = x[1]
if prepended_suffix:
def insert_suffix (p):
l = p.split ('.')
if len (l) >= 2:
l[-2] += prepended_suffix
return '.'.join (l)
return p + prepended_suffix
else:
insert_suffix = lambda p: p
if link_type == 'symbolic':
link = os.symlink
elif link_type == 'hard':
link = os.link
else:
sys.stderr.write(sys.argv[0] + ': ' + link_type + ": wrong argument, expected 'symbolic' or 'hard'\n")
sys.exit (1)
sourcefiles = []
for pattern in files:
sourcefiles += (glob.glob (os.path.join (source_dir, pattern)))
def relative_path (f):
if source_dir == '.':
return f
return f[len (source_dir) + 1:]
destfiles = [os.path.join (dest_dir, insert_suffix (relative_path (f))) for f in sourcefiles]
destdirs = set ([os.path.dirname (dest) for dest in destfiles])
[os.makedirs (d) for d in destdirs if not os.path.exists (d)]
def force_link (src,dest):
if os.path.exists (dest):
os.system ('rm -f ' + dest)
link (src, dest)
map (force_link, sourcefiles, destfiles)
|