Copy directory tree without copying files

Copy directory tree without copying files

Post by Jeremy Con » Fri, 25 Sep 2009 00:04:00


I am trying to copy a folder hierarchy from one location to another.
I can use the shutil.copytree function to copy the folder tree, but I
don't want the files copied, just the folders. What is a good way to
approach this?

Thanks,
Jeremy
 
 
 

Copy directory tree without copying files

Post by dwatrou » Fri, 25 Sep 2009 00:15:13

Have you considered using os.walk?
http://www.yqcomputer.com/ #os.walk

It won't be completely automated, but I think it should allow you to
easily walk the directory structure to reproduce it in another
location.

If the file names/extensions are predictable you might also be able to
use the ignore attribute in the shutil.copytree function to prevent
copying files:
http://www.yqcomputer.com/ #shutil.copytree

Daniel

 
 
 

Copy directory tree without copying files

Post by Tim Golde » Fri, 25 Sep 2009 00:15:45


Use os.walk and create the directories as they appear?

TJG
 
 
 

Copy directory tree without copying files

Post by Jeremy Con » Fri, 25 Sep 2009 00:18:03


I was hoping to use os.walk, but this doesn't work because I wont know
when os.walk descends into a new directory or which directory it
descends into. Perhaps I don't understand everything about it.

Thanks,
Jeremy
 
 
 

Copy directory tree without copying files

Post by Peter Otte » Fri, 25 Sep 2009 00:24:37


The easiest is

def ignore(folder, names):
return set(n for n in names if not
os.path.isdir(os.path.join(folder, n)))

shutil.copytree(source, dest, ignore=ignore)

Peter
 
 
 

Copy directory tree without copying files

Post by Jeremy Con » Fri, 25 Sep 2009 00:25:55


Thanks, that helps. I could write a function like

def ignore_files(dirpath):
ignore = []
for f in os.listdir(dirpath)
if os.path.isfile(f):
ignore.append(f)
return ignore


That seems like it will work (haven't tested yet). Thanks for the
help.
Jeremy
 
 
 

Copy directory tree without copying files

Post by Tim Golde » Fri, 25 Sep 2009 00:31:48


Some rough but working code might help you out here:

<code>
import os

source_dir = "c:/temp/oldtree"
target_dir = "c:/temp/newtree" # should not exist yet

for dirpath, dirnames, filenames in os.walk (source_dir):
os.mkdir (os.path.join (target_dir, dirpath[1+len (source_dir):]))

os.startfile (target_dir)

</code>

TJG
 
 
 

Copy directory tree without copying files

Post by Jeremy Con » Fri, 25 Sep 2009 00:43:27


Perfect. That's exactly what I needed.
Jeremy
 
 
 

Copy directory tree without copying files

Post by Grant Edwa » Fri, 25 Sep 2009 00:44:39


Just in case there's no real requirement to use Python...

$ (cd srcdir; find . -type d) | (cd dstdir; xargs mkdir)

--
Grant Edwards grante Yow! ... My pants just went
at on a wild rampage through a
visi.com Long Island Bowling Alley!!
 
 
 

Copy directory tree without copying files

Post by Jeremy Con » Fri, 25 Sep 2009 01:03:15


Thanks, but this has to be platform independent so Python seemed like
a good choice.

Jeremy