From 5980845bd5e8cb5a75c7c6d99bd80863c4437169 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 29 Apr 1997 14:06:05 +0000 Subject: [PATCH] Add feature to copy(), copy2(): dst may be a directory. Remove unneeded check for '.' / '..' from copytree(). Add some comments. --- Lib/shutil.py | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/Lib/shutil.py b/Lib/shutil.py index 1a5a6f1ccfa..21dce5e888c 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1,5 +1,6 @@ -# Module 'shutil' -- utility functions usable in a shell-like program -# XXX The copy*() functions here don't copy the data fork on Mac +# Module 'shutil' -- utility functions usable in a shell-like program. +# XXX The copy*() functions here don't copy the data fork on Mac. +# XXX Consider this example code rather than flexible tools. import os @@ -40,15 +41,21 @@ def copystat(src, dst): os.chmod(dst, mode) os.utime(dst, st[7:9]) -# Copy data and mode bits ("cp src dst") +# Copy data and mode bits ("cp src dst"). +# Support directory as target. # def copy(src, dst): + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) copyfile(src, dst) copymode(src, dst) -# Copy data and all stat info ("cp -p src dst") +# Copy data and all stat info ("cp -p src dst"). +# Support directory as target. # def copy2(src, dst): + if os.path.isdir(dst): + dst = os.path.join(dst, os.path.basename(src)) copyfile(src, dst) copystat(src, dst) @@ -58,22 +65,20 @@ def copy2(src, dst): def copytree(src, dst): names = os.listdir(src) os.mkdir(dst, 0777) - dot_dotdot = (os.curdir, os.pardir) for name in names: - if name not in dot_dotdot: - srcname = os.path.join(src, name) - dstname = os.path.join(dst, name) - #print 'Copying', srcname, 'to', dstname - try: - #if os.path.islink(srcname): - # linkto = os.readlink(srcname) - # os.symlink(linkto, dstname) - #elif os.path.isdir(srcname): - if os.path.isdir(srcname): - copytree(srcname, dstname) - else: - copy2(srcname, dstname) - # XXX What about devices, sockets etc.? - except os.error, why: - print 'Could not copy', srcname, 'to', dstname, - print '(', why[1], ')' + srcname = os.path.join(src, name) + dstname = os.path.join(dst, name) + #print 'Copying', srcname, 'to', dstname + try: + #if os.path.islink(srcname): + # linkto = os.readlink(srcname) + # os.symlink(linkto, dstname) + #elif os.path.isdir(srcname): + if os.path.isdir(srcname): + copytree(srcname, dstname) + else: + copy2(srcname, dstname) + # XXX What about devices, sockets etc.? + except os.error, why: + print 'Could not copy', srcname, 'to', dstname, + print '(', why[1], ')'