root和base目录有什么区别?

时间:2015-10-25 18:58:01

标签: python shutil

我正在尝试使用shutils.pymake_archive功能。
在这里:https://docs.python.org/2/library/shutil.html#archiving-operations
但是我无法理解root_dir和base_dir之间的区别。
这是一个使用make_archive的简单代码:

#!user/bin/python
from os import path
from os import curdir
from shutil import make_archive
# Setting current Directory
current = path.realpath(curdir)
# Now Compressing
make_archive("Backup", "gztar", current)

这将创建一个名为Backup.tar.gz的存档,其中包含一个。里面的目录。 我不想要。目录,但存档中的整个内容。

4 个答案:

答案 0 :(得分:2)

root_dir是指输出文件的基本目录,或者是工作脚本的工作目录。

base_dir是指您想要打包的内容。

例如,如果您有一棵树:

map

你想为someproject文件夹制作一个包,你可以设置:

maximum (map get2th) ls

如果您的树的内容如下所示,例如: /home/apast/git/someproject/test.py /home/apast/git/someproject/model.py

您的包裹的内容将获得以下结构:

    someproject / test.py     someproject / model.py

您的包裹文件将存储在:

/home/apast/git/someproject

与doc show一样,默认情况下,root_dir和base_dir是针对当前工作目录(cwd或curdir)初始化的。但是,您可以更灵活地使用它。

答案 1 :(得分:2)

让我们考虑一下dir结构:

/home/apast/git/web/tornado.py
/home/apast/git/web/setup.py

/home/apast/git/core/service.py

/home/apast/git/mobile/gui.py
/home/apast/git/mobile/restfulapi.py

我们将尝试两个片段来澄清示例: 1.定义base_dir 2.没有定义base_dir

  1. 定义base_dir,我们指定我们将在文件中包含哪个目录:

    from shutil import make_archive
    root_dir = "/home/apast/git/"
    
    make_archive(base_name="/tmp/outputfile",
                 format="gztar",
                 root_dir=root_dir,
                 base_dir="web")
    

    此代码将生成一个名为/tmp/outputfile.tar.gz的文件,其中包含以下结构:

    web/tornado.py
    web/setup.py
    
  2. 在没有base_dir的情况下运行,如下所示:

    from shutil import make_archive
    
    root_dir = "/home/apast/git/"
    
    make_archive(base_name="/tmp/outputfile",
                 format="gztar",
                 root_dir=root_dir)
    

    它将生成一个包含以下内容的文件:

    web/tornado.py
    web/setup.py
    core/service.py
    mobile/gui.py
    mobile/restfulapi.py
    
  3. 要定义特定的文件夹,可能需要使用其他一些技术,比如gzip lib。

答案 2 :(得分:1)

如果您阅读文档会有点混乱,但如果您在视觉上看到它,它可能会有所帮助。

root_dir是您将存储文件的目录。

如果我在C:\Users\Elipzer\Desktop\MyFolder\存储文件,那就是我的root_dir

base_dir是添加到root_dir的部分,因此,如果我将其存储在MyFolder的{​​{1}}下,我会将其作为...\MyFolder\MySubFolder\ }。

在许多情况下,不需要使用这些,因为您只需将默认目录更改为要存储文件的目录,base_dir函数将只使用默认目录作为{ {1}}和make_archive

答案 3 :(得分:0)

在root_dir中的cd ...然后tar对base_dir ... 文档让我感到困惑,阅读代码,这将使你清楚。