Hello, I'm new to Python, and I'm very impressed with the potential of this = language to simplify much of the software my company provides. As a = first project, I'm looking to replace some tricky scripts written in csh = for setting up our tool hierarchies. An example is a script to = construct a "mock hierarchy" out of some patch files and links to a = production hierarchy. Our hierarchies are typically two gigabytes, = thousands of files, lots of strange links, many of which are broken. So = the script needs to be fairly robust. The functions in 'shutil' won't = do it. 'copytree' works, but the cost is a huge amount of disk space. = A mock hierarchy takes not much more space than the patch files = themselves. After a brief search on the Python website, I couldn't find a suitable = utility, and decided to write my own (see below). It seems like this = could be a useful, general-purpose addition to 'shutil'. I've tested this on a large hierarchy on a Solaris workstation, and it = seems to work. There are some dark corners which worry me however, so I = thought I would get some advice from the experts. Has anything like = this already been done or is it planned? Would a function like this be = a useful addition to 'shutil'? I'm intending to continue work on it, = and will be glad to contribute it to the library. import os, sys from os.path import * def linktree(oldtree, newtree): """linktree(oldtree, newtree) -> None Leave 'oldtree' undisturbed. Recursively add links to 'newtree', = until it looks just like 'oldtree', but with the new files patched in.=20 """ names =3D os.listdir(oldtree) print 'Candidates: ', names for name in names: oldpath =3D abspath(join(oldtree, name)) newpath =3D abspath(join(newtree, name)) if not exists(newpath) and not islink(newpath): if not exists(oldpath): # Don't link to a bad link. print '*** Error ***\nPath does not exist:\n', oldpath continue print 'New link: ', newpath os.symlink(oldpath, newpath) # OK if oldpath is a good link. elif isfile(newpath) and not islink(newpath): print 'As is: ', newpath=20 pass # Leave new files as is. elif isdir(newpath) and not islink(newpath): print 'Down one level \n', newpath linktree(oldpath, newpath) # Recursive call print 'Up one level' else: print '*** Error ***\nNot a file or directory:\n', newpath - Dave ************************************************************* * * David MacQuigg * email: macquigg@cadence.com * * * Principal Product Engineer * phone: USA 520-721-4583 * * * * Analog Artist * * * * * 9320 East Mikelyn Lane * * * * Cadence Design Systems, Inc. * Tucson, Arizona 85710 * ************************************************************* *=20
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4