bpo-22021: Update root_dir and base_dir documentation in shutil (GH-1… · python/cpython@12dfbae (original) (raw)
`` @@ -567,12 +567,14 @@ provided. They rely on the :mod:zipfile
and :mod:tarfile
modules.
``
567
567
`` available), or "xztar" (if the :mod:lzma
module is available).
``
568
568
``
569
569
` root_dir is a directory that will be the root directory of the
`
570
``
`-
archive; for example, we typically chdir into root_dir before creating the
`
571
``
`-
archive.
`
``
570
`+
archive, all paths in the archive will be relative to it; for example,
`
``
571
`+
we typically chdir into root_dir before creating the archive.
`
572
572
``
573
573
` base_dir is the directory where we start archiving from;
`
574
574
` i.e. base_dir will be the common prefix of all files and
`
575
``
`-
directories in the archive.
`
``
575
`+
directories in the archive. base_dir must be given relative
`
``
576
`` +
to root_dir. See :ref:shutil-archiving-example-with-basedir
for how to
``
``
577
`+
use base_dir and root_dir together.
`
576
578
``
577
579
` root_dir and base_dir both default to the current directory.
`
578
580
``
`@@ -724,6 +726,48 @@ The resulting archive contains:
`
724
726
` -rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts
`
725
727
``
726
728
``
``
729
`+
.. _shutil-archiving-example-with-basedir:
`
``
730
+
``
731
`+
Archiving example with base_dir
`
``
732
`+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`
``
733
+
``
734
`` +
In this example, similar to the one above <shutil-archiving-example_>
_,
``
``
735
`` +
we show how to use :func:make_archive
, but this time with the usage of
``
``
736
`+
base_dir. We now have the following directory structure:
`
``
737
+
``
738
`+
.. code-block:: shell-session
`
``
739
+
``
740
`+
$ tree tmp
`
``
741
`+
tmp
`
``
742
`+
└── root
`
``
743
`+
└── structure
`
``
744
`+
├── content
`
``
745
`+
└── please_add.txt
`
``
746
`+
└── do_not_add.txt
`
``
747
+
``
748
`` +
In the final archive, :file:please_add.txt
should be included, but
``
``
749
`` +
:file:do_not_add.txt
should not. Therefore we use the following::
``
``
750
+
``
751
`+
from shutil import make_archive
`
``
752
`+
import os
`
``
753
`+
archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
`
``
754
`+
make_archive(
`
``
755
`+
... archive_name,
`
``
756
`+
... 'tar',
`
``
757
`+
... root_dir='tmp/root',
`
``
758
`+
... base_dir='structure/content',
`
``
759
`+
... )
`
``
760
`+
'/Users/tarek/my_archive.tar'
`
``
761
+
``
762
`+
Listing the files in the resulting archive gives us:
`
``
763
+
``
764
`+
.. code-block:: shell-session
`
``
765
+
``
766
`+
$ python -m tarfile -l /Users/tarek/myarchive.tar
`
``
767
`+
structure/content/
`
``
768
`+
structure/content/please_add.txt
`
``
769
+
``
770
+
727
771
`Querying the size of the output terminal
`
728
772
`----------------------------------------
`
729
773
``