Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #29206 > unrolled thread

Moving folders with content

Started by<jyoung79@kc.rr.com>
First post2012-09-15 04:36 +0000
Last post2012-09-15 12:52 +0200
Articles 3 — 3 participants

Back to article view | Back to comp.lang.python


Contents

  Moving folders with content <jyoung79@kc.rr.com> - 2012-09-15 04:36 +0000
    Re: Moving folders with content Nobody <nobody@nowhere.com> - 2012-09-15 09:00 +0100
      Re: Moving folders with content Hans Mulder <hansmu@xs4all.nl> - 2012-09-15 12:52 +0200

#29206 — Moving folders with content

From<jyoung79@kc.rr.com>
Date2012-09-15 04:36 +0000
SubjectMoving folders with content
Message-ID<mailman.735.1347683829.27098.python-list@python.org>
Hello,

I am working in both OS X Snow Leopard and Lion (10.6.8 and 10.7.4).  
I'm simply wanting to move folders (with their content) from various 
servers to the hard drive and then back to different directories on the 
servers.

I want to be careful not to remove any metadata or resource forks from 
the files in the directories.  I did a bit of researching on shutil, and 
looks like it is similar to using "cp -p" and copystat(), which I believe 
will keep the resource fork, etc.

Here's the code I came up with.  I'm curious if anyone finds fault with 
this, or if there's a better way to do this?

Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import os
>>> import shutil
>>> 
>>> p1 = os.path.expanduser('~/Desktop/IN/Test/')
>>> p2 = os.path.expanduser('~/Desktop/OUT/Test/')
>>> 
>>> if os.path.exists(p2): shutil.rmtree(p2)
... 
>>> shutil.copytree(p1, p2)
>>> shutil.rmtree(p1)
>>> 

Thanks!

Jay

[toc] | [next] | [standalone]


#29211

FromNobody <nobody@nowhere.com>
Date2012-09-15 09:00 +0100
Message-ID<pan.2012.09.15.08.00.19.877000@nowhere.com>
In reply to#29206
On Sat, 15 Sep 2012 04:36:00 +0000, jyoung79 wrote:

> I am working in both OS X Snow Leopard and Lion (10.6.8 and 10.7.4).  
> I'm simply wanting to move folders (with their content) from various 
> servers to the hard drive and then back to different directories on the 
> servers.
> 
> I want to be careful not to remove any metadata or resource forks from 
> the files in the directories.  I did a bit of researching on shutil, and 
> looks like it is similar to using "cp -p" and copystat(), which I believe 
> will keep the resource fork, etc.

I don't think so. The shutil documentation says:

	Warning

	Even the higher-level file copying functions (copy(), copy2()) can’t
	copy all file metadata.

	On POSIX platforms, this means that file owner and group are lost as well
	as ACLs. On Mac OS, the resource fork and other metadata are not used.
	This means that resources will be lost and file type and creator codes
	will not be correct. On Windows, file owners, ACLs and alternate data
	streams are not copied.

The macostools module has functions which can copy the resource fork, but
they aren't available in 64-bit builds and have been removed in Python 3.0.

[toc] | [prev] | [next] | [standalone]


#29217

FromHans Mulder <hansmu@xs4all.nl>
Date2012-09-15 12:52 +0200
Message-ID<50545de1$0$6853$e4fe514c@news2.news.xs4all.nl>
In reply to#29211
On 15/09/12 10:00:16, Nobody wrote:
> On Sat, 15 Sep 2012 04:36:00 +0000, jyoung79 wrote:
> 
>> I am working in both OS X Snow Leopard and Lion (10.6.8 and 10.7.4).  
>> I'm simply wanting to move folders (with their content) from various 
>> servers to the hard drive and then back to different directories on the 
>> servers.
>>
>> I want to be careful not to remove any metadata or resource forks from 
>> the files in the directories.  I did a bit of researching on shutil, and 
>> looks like it is similar to using "cp -p" and copystat(), which I believe 
>> will keep the resource fork, etc.
> 
> I don't think so. The shutil documentation says:
> 
> 	Warning
> 
> 	Even the higher-level file copying functions (copy(), copy2()) can’t
> 	copy all file metadata.
> 
> 	On POSIX platforms, this means that file owner and group are lost as well
> 	as ACLs. On Mac OS, the resource fork and other metadata are not used.
> 	This means that resources will be lost and file type and creator codes
> 	will not be correct. On Windows, file owners, ACLs and alternate data
> 	streams are not copied.
> 
> The macostools module has functions which can copy the resource fork, but
> they aren't available in 64-bit builds and have been removed in Python 3.0.

You may want to use the subprocess module to run 'ditto'.  If
the destination folder does not exist, then ditto will copy MacOS
specific aspects such as resource forks, ACLs and HFS meta-data.

If the destination already exists, then ditto will copy file
contents, but not modify mode, ownership or ACLs of existing
folders inside the destination folder.

See the manual page for details.


Hope this helps,

-- HansM

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web