blob: cb0a9ae9336c2348c5015147ce825109ee23a697 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001
2:mod:`shutil` --- High-level file operations
3============================================
4
5.. module:: shutil
6 :synopsis: High-level file operations, including copying.
7.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
Georg Brandlb19be572007-12-29 10:57:00 +00008.. partly based on the docstrings
Georg Brandl8ec7f652007-08-15 14:28:01 +00009
10.. index::
11 single: file; copying
12 single: copying files
13
14The :mod:`shutil` module offers a number of high-level operations on files and
15collections of files. In particular, functions are provided which support file
Mark Summerfieldac3d4292007-11-02 08:24:59 +000016copying and removal. For operations on individual files, see also the
17:mod:`os` module.
Georg Brandl8ec7f652007-08-15 14:28:01 +000018
Raymond Hettingere0e08222010-11-06 07:10:31 +000019.. seealso::
20
21 Latest version of the `shutil module Python source code
22 <http://svn.python.org/view/python/branches/release27-maint/Lib/shutil.py?view=markup>`_
23
Georg Brandlbf863b12007-08-15 19:06:04 +000024.. warning::
Georg Brandlec32b6b2008-01-06 16:12:39 +000025
26 Even the higher-level file copying functions (:func:`copy`, :func:`copy2`)
27 can't copy all file metadata.
Georg Brandlc62ef8b2009-01-03 20:55:06 +000028
Georg Brandlec32b6b2008-01-06 16:12:39 +000029 On POSIX platforms, this means that file owner and group are lost as well
Georg Brandl9af94982008-09-13 17:41:16 +000030 as ACLs. On Mac OS, the resource fork and other metadata are not used.
Georg Brandlec32b6b2008-01-06 16:12:39 +000031 This means that resources will be lost and file type and creator codes will
32 not be correct. On Windows, file owners, ACLs and alternate data streams
33 are not copied.
Georg Brandl8ec7f652007-08-15 14:28:01 +000034
Raymond Hettingere0e08222010-11-06 07:10:31 +000035
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +000036Directory and files operations
37------------------------------
Georg Brandl8ec7f652007-08-15 14:28:01 +000038
Georg Brandl8ec7f652007-08-15 14:28:01 +000039.. function:: copyfileobj(fsrc, fdst[, length])
40
41 Copy the contents of the file-like object *fsrc* to the file-like object *fdst*.
42 The integer *length*, if given, is the buffer size. In particular, a negative
43 *length* value means to copy the data without looping over the source data in
44 chunks; by default the data is read in chunks to avoid uncontrolled memory
45 consumption. Note that if the current file position of the *fsrc* object is not
46 0, only the contents from the current file position to the end of the file will
47 be copied.
48
49
Georg Brandl786ead62008-04-19 16:57:43 +000050.. function:: copyfile(src, dst)
51
52 Copy the contents (no metadata) of the file named *src* to a file named *dst*.
53 *dst* must be the complete target file name; look at :func:`copy` for a copy that
Georg Brandl905e0f62008-12-05 15:32:29 +000054 accepts a target directory path. If *src* and *dst* are the same files,
55 :exc:`Error` is raised.
Georg Brandl786ead62008-04-19 16:57:43 +000056 The destination location must be writable; otherwise, an :exc:`IOError` exception
57 will be raised. If *dst* already exists, it will be replaced. Special files
58 such as character or block devices and pipes cannot be copied with this
59 function. *src* and *dst* are path names given as strings.
60
61
Georg Brandl8ec7f652007-08-15 14:28:01 +000062.. function:: copymode(src, dst)
63
64 Copy the permission bits from *src* to *dst*. The file contents, owner, and
65 group are unaffected. *src* and *dst* are path names given as strings.
66
67
68.. function:: copystat(src, dst)
69
70 Copy the permission bits, last access time, last modification time, and flags
71 from *src* to *dst*. The file contents, owner, and group are unaffected. *src*
72 and *dst* are path names given as strings.
73
74
75.. function:: copy(src, dst)
76
77 Copy the file *src* to the file or directory *dst*. If *dst* is a directory, a
78 file with the same basename as *src* is created (or overwritten) in the
79 directory specified. Permission bits are copied. *src* and *dst* are path
80 names given as strings.
81
82
83.. function:: copy2(src, dst)
84
Georg Brandl88107da2008-05-16 13:18:50 +000085 Similar to :func:`copy`, but metadata is copied as well -- in fact, this is just
86 :func:`copy` followed by :func:`copystat`. This is similar to the
87 Unix command :program:`cp -p`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000088
89
Georg Brandle78fbcc2008-07-05 10:13:36 +000090.. function:: ignore_patterns(\*patterns)
91
92 This factory function creates a function that can be used as a callable for
93 :func:`copytree`\'s *ignore* argument, ignoring files and directories that
Andrew M. Kuchlingc4060842008-07-06 17:43:16 +000094 match one of the glob-style *patterns* provided. See the example below.
Georg Brandle78fbcc2008-07-05 10:13:36 +000095
96 .. versionadded:: 2.6
97
98
99.. function:: copytree(src, dst[, symlinks=False[, ignore=None]])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000100
101 Recursively copy an entire directory tree rooted at *src*. The destination
Georg Brandle78fbcc2008-07-05 10:13:36 +0000102 directory, named by *dst*, must not already exist; it will be created as well
103 as missing parent directories. Permissions and times of directories are
104 copied with :func:`copystat`, individual files are copied using
105 :func:`copy2`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000106
Georg Brandle78fbcc2008-07-05 10:13:36 +0000107 If *symlinks* is true, symbolic links in the source tree are represented as
Senthil Kumaran22a7b482011-08-02 18:50:44 +0800108 symbolic links in the new tree, but the metadata of the original links is NOT
109 copied; if false or omitted, the contents and metadata of the linked files
110 are copied to the new tree.
Georg Brandle78fbcc2008-07-05 10:13:36 +0000111
112 If *ignore* is given, it must be a callable that will receive as its
113 arguments the directory being visited by :func:`copytree`, and a list of its
114 contents, as returned by :func:`os.listdir`. Since :func:`copytree` is
115 called recursively, the *ignore* callable will be called once for each
116 directory that is copied. The callable must return a sequence of directory
117 and file names relative to the current directory (i.e. a subset of the items
118 in its second argument); these names will then be ignored in the copy
119 process. :func:`ignore_patterns` can be used to create such a callable that
120 ignores names based on glob-style patterns.
121
122 If exception(s) occur, an :exc:`Error` is raised with a list of reasons.
123
124 The source code for this should be considered an example rather than the
125 ultimate tool.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000126
127 .. versionchanged:: 2.3
128 :exc:`Error` is raised if any exceptions occur during copying, rather than
129 printing a message.
130
131 .. versionchanged:: 2.5
132 Create intermediate directories needed to create *dst*, rather than raising an
133 error. Copy permissions and times of directories using :func:`copystat`.
134
Georg Brandle78fbcc2008-07-05 10:13:36 +0000135 .. versionchanged:: 2.6
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000136 Added the *ignore* argument to be able to influence what is being copied.
Georg Brandle78fbcc2008-07-05 10:13:36 +0000137
Georg Brandl8ec7f652007-08-15 14:28:01 +0000138
139.. function:: rmtree(path[, ignore_errors[, onerror]])
140
141 .. index:: single: directory; deleting
142
Georg Brandl52353982008-01-20 14:17:42 +0000143 Delete an entire directory tree; *path* must point to a directory (but not a
144 symbolic link to a directory). If *ignore_errors* is true, errors resulting
145 from failed removals will be ignored; if false or omitted, such errors are
146 handled by calling a handler specified by *onerror* or, if that is omitted,
147 they raise an exception.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000148
Georg Brandl52353982008-01-20 14:17:42 +0000149 If *onerror* is provided, it must be a callable that accepts three
150 parameters: *function*, *path*, and *excinfo*. The first parameter,
151 *function*, is the function which raised the exception; it will be
152 :func:`os.path.islink`, :func:`os.listdir`, :func:`os.remove` or
153 :func:`os.rmdir`. The second parameter, *path*, will be the path name passed
154 to *function*. The third parameter, *excinfo*, will be the exception
155 information return by :func:`sys.exc_info`. Exceptions raised by *onerror*
156 will not be caught.
157
158 .. versionchanged:: 2.6
159 Explicitly check for *path* being a symbolic link and raise :exc:`OSError`
160 in that case.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000161
162
163.. function:: move(src, dst)
164
Éric Araujod01aebe2011-07-29 12:10:53 +0200165 Recursively move a file or directory (*src*) to another location (*dst*).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000166
Éric Araujod01aebe2011-07-29 12:10:53 +0200167 If the destination is a directory or a symlink to a directory, then *src* is
168 moved inside that directory.
169
170 The destination directory must not already exist. If the destination already
171 exists but is not a directory, it may be overwritten depending on
172 :func:`os.rename` semantics.
173
174 If the destination is on the current filesystem, then :func:`os.rename` is
175 used. Otherwise, *src* is copied (using :func:`copy2`) to *dst* and then
176 removed.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000177
178 .. versionadded:: 2.3
179
180
181.. exception:: Error
182
Éric Araujod01aebe2011-07-29 12:10:53 +0200183 This exception collects exceptions that are raised during a multi-file
184 operation. For :func:`copytree`, the exception argument is a list of 3-tuples
185 (*srcname*, *dstname*, *exception*).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000186
187 .. versionadded:: 2.3
188
Éric Araujod01aebe2011-07-29 12:10:53 +0200189
Georg Brandl8ec7f652007-08-15 14:28:01 +0000190.. _shutil-example:
191
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +0000192copytree example
193::::::::::::::::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000194
195This example is the implementation of the :func:`copytree` function, described
196above, with the docstring omitted. It demonstrates many of the other functions
197provided by this module. ::
198
Georg Brandle78fbcc2008-07-05 10:13:36 +0000199 def copytree(src, dst, symlinks=False, ignore=None):
Georg Brandl8ec7f652007-08-15 14:28:01 +0000200 names = os.listdir(src)
Georg Brandle78fbcc2008-07-05 10:13:36 +0000201 if ignore is not None:
202 ignored_names = ignore(src, names)
203 else:
204 ignored_names = set()
205
Georg Brandl8ec7f652007-08-15 14:28:01 +0000206 os.makedirs(dst)
207 errors = []
208 for name in names:
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000209 if name in ignored_names:
Georg Brandle78fbcc2008-07-05 10:13:36 +0000210 continue
Georg Brandl8ec7f652007-08-15 14:28:01 +0000211 srcname = os.path.join(src, name)
212 dstname = os.path.join(dst, name)
213 try:
214 if symlinks and os.path.islink(srcname):
215 linkto = os.readlink(srcname)
216 os.symlink(linkto, dstname)
217 elif os.path.isdir(srcname):
Georg Brandle78fbcc2008-07-05 10:13:36 +0000218 copytree(srcname, dstname, symlinks, ignore)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000219 else:
220 copy2(srcname, dstname)
221 # XXX What about devices, sockets etc.?
222 except (IOError, os.error), why:
223 errors.append((srcname, dstname, str(why)))
224 # catch the Error from the recursive copytree so that we can
225 # continue with other files
226 except Error, err:
227 errors.extend(err.args[0])
228 try:
229 copystat(src, dst)
230 except WindowsError:
231 # can't copy file access times on Windows
232 pass
233 except OSError, why:
234 errors.extend((src, dst, str(why)))
235 if errors:
Georg Brandlc1edec32009-06-03 07:25:35 +0000236 raise Error(errors)
Georg Brandle78fbcc2008-07-05 10:13:36 +0000237
238Another example that uses the :func:`ignore_patterns` helper::
239
240 from shutil import copytree, ignore_patterns
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000241
Georg Brandle78fbcc2008-07-05 10:13:36 +0000242 copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
243
244This will copy everything except ``.pyc`` files and files or directories whose
245name starts with ``tmp``.
246
247Another example that uses the *ignore* argument to add a logging call::
248
249 from shutil import copytree
250 import logging
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000251
Georg Brandle78fbcc2008-07-05 10:13:36 +0000252 def _logpath(path, names):
253 logging.info('Working in %s' % path)
254 return [] # nothing will be ignored
255
256 copytree(source, destination, ignore=_logpath)
257
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +0000258
259Archives operations
260-------------------
261
262.. function:: make_archive(base_name, format, [root_dir, [base_dir, [verbose, [dry_run, [owner, [group, [logger]]]]]]])
263
264 Create an archive file (eg. zip or tar) and returns its name.
265
266 *base_name* is the name of the file to create, including the path, minus
267 any format-specific extension. *format* is the archive format: one of
Tarek Ziadée593fad2010-04-20 21:09:06 +0000268 "zip", "tar", "bztar" or "gztar".
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +0000269
270 *root_dir* is a directory that will be the root directory of the
271 archive; ie. we typically chdir into *root_dir* before creating the
272 archive.
273
274 *base_dir* is the directory where we start archiving from;
275 ie. *base_dir* will be the common prefix of all files and
276 directories in the archive.
277
278 *root_dir* and *base_dir* both default to the current directory.
279
280 *owner* and *group* are used when creating a tar archive. By default,
281 uses the current owner and group.
282
283 .. versionadded:: 2.7
284
285
286.. function:: get_archive_formats()
287
Éric Araujod01aebe2011-07-29 12:10:53 +0200288 Return a list of supported formats for archiving.
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +0000289 Each element of the returned sequence is a tuple ``(name, description)``
290
291 By default :mod:`shutil` provides these formats:
292
293 - *gztar*: gzip'ed tar-file
294 - *bztar*: bzip2'ed tar-file
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +0000295 - *tar*: uncompressed tar file
296 - *zip*: ZIP file
297
298 You can register new formats or provide your own archiver for any existing
299 formats, by using :func:`register_archive_format`.
300
301 .. versionadded:: 2.7
302
303
304.. function:: register_archive_format(name, function, [extra_args, [description]])
305
Éric Araujod01aebe2011-07-29 12:10:53 +0200306 Register an archiver for the format *name*. *function* is a callable that
Tarek Ziadé48cc8dc2010-02-23 05:16:41 +0000307 will be used to invoke the archiver.
308
309 If given, *extra_args* is a sequence of ``(name, value)`` that will be
310 used as extra keywords arguments when the archiver callable is used.
311
312 *description* is used by :func:`get_archive_formats` which returns the
313 list of archivers. Defaults to an empty list.
314
315 .. versionadded:: 2.7
316
317
318.. function:: unregister_archive_format(name)
319
320 Remove the archive format *name* from the list of supported formats.
321
322 .. versionadded:: 2.7
323
324
325Archiving example
326:::::::::::::::::
327
328In this example, we create a gzip'ed tar-file archive containing all files
329found in the :file:`.ssh` directory of the user::
330
331 >>> from shutil import make_archive
332 >>> import os
333 >>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
334 >>> root_dir = os.path.expanduser(os.path.join('~', '.ssh'))
335 >>> make_archive(archive_name, 'gztar', root_dir)
336 '/Users/tarek/myarchive.tar.gz'
337
338The resulting archive contains::
339
340 $ tar -tzvf /Users/tarek/myarchive.tar.gz
341 drwx------ tarek/staff 0 2010-02-01 16:23:40 ./
342 -rw-r--r-- tarek/staff 609 2008-06-09 13:26:54 ./authorized_keys
343 -rwxr-xr-x tarek/staff 65 2008-06-09 13:26:54 ./config
344 -rwx------ tarek/staff 668 2008-06-09 13:26:54 ./id_dsa
345 -rwxr-xr-x tarek/staff 609 2008-06-09 13:26:54 ./id_dsa.pub
346 -rw------- tarek/staff 1675 2008-06-09 13:26:54 ./id_rsa
347 -rw-r--r-- tarek/staff 397 2008-06-09 13:26:54 ./id_rsa.pub
348 -rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts
349
350