我正在尝试使用shutils.py
,make_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的存档,其中包含一个。里面的目录。 我不想要。目录,但存档中的整个内容。
答案 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
定义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
在没有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
要定义特定的文件夹,可能需要使用其他一些技术,比如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 ... 文档让我感到困惑,阅读代码,这将使你清楚。