Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #29206 > unrolled thread
| Started by | <jyoung79@kc.rr.com> |
|---|---|
| First post | 2012-09-15 04:36 +0000 |
| Last post | 2012-09-15 12:52 +0200 |
| Articles | 3 — 3 participants |
Back to article view | Back to comp.lang.python
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
| From | <jyoung79@kc.rr.com> |
|---|---|
| Date | 2012-09-15 04:36 +0000 |
| Subject | Moving 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]
| From | Nobody <nobody@nowhere.com> |
|---|---|
| Date | 2012-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]
| From | Hans Mulder <hansmu@xs4all.nl> |
|---|---|
| Date | 2012-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