4 # USAGE: mass-link.py [--prepend-suffix SUFFIX] symbolic | hard SOURCEDIR DESTDIR FILES
6 # create hard or symbolic links to SOURCEDIR/FILES in DESTDIR
8 # If --prepend-suffix is specified, link to foo.bar will be called fooSUFFIX.bar.
9 # Shell wildcards expansion is performed on FILES.
18 optlist
, args
= getopt
.getopt (sys
.argv
[1:], '', ['prepend-suffix='])
19 link_type
, source_dir
, dest_dir
= args
[0:3]
22 source_dir
= os
.path
.normpath (source_dir
)
23 dest_dir
= os
.path
.normpath (dest_dir
)
27 if x
[0] == '--prepend-suffix':
28 prepended_suffix
= x
[1]
31 def insert_suffix (p
):
34 l
[-2] += prepended_suffix
36 return p
+ prepended_suffix
38 insert_suffix
= lambda p
: p
40 if link_type
== 'symbolic':
42 elif link_type
== 'hard':
45 sys
.stderr
.write(sys
.argv
[0] + ': ' + link_type
+ ": wrong argument, expected 'symbolic' or 'hard'\n")
50 sourcefiles
+= (glob
.glob (os
.path
.join (source_dir
, pattern
)))
52 def relative_path (f
):
55 return f
[len (source_dir
) + 1:]
57 destfiles
= [os
.path
.join (dest_dir
, insert_suffix (relative_path (f
))) for f
in sourcefiles
]
59 destdirs
= set ([os
.path
.dirname (dest
) for dest
in destfiles
])
60 [os
.makedirs (d
) for d
in destdirs
if not os
.path
.exists (d
)]
62 def force_link (src
,dest
):
63 if os
.path
.exists (dest
):
64 os
.system ('rm -f ' + dest
)
67 map (force_link
, sourcefiles
, destfiles
)