Moving folders with content

G

Guest

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.
Thanks!

Jay
 
N

Nobody

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.
 
H

Hans Mulder

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top