我从某本书上复制了这个脚本来制作一些文件夹的 tar.bz2 进行备份。
#!/usr/bin/env python
import tarfile, os
def make_tar(folder_to_backup, dest_folder, compression='bz2'):
if compression:
dest_ext ='.' + compression
else:
dest_ext = ''
arcname = os.path.basename(folder_to_backup)
dest_name = '%s.tar%s' % (arcname, dest_ext)
dest_path = os.path.join(dest_folder, dest_name)
if compression:
dest_cmp = ':' + compression
else:
dest_cmp = ''
out = tarfile.TarFile.open(dest_path, 'w' +dest_cmp)
out.add(folder_to_backup, arcname)
out.close()
return dest_path
print "Doing Python"
make_tar('/home/bob/public_html','/home/bob/testbck', compression='bz2')
现在 bash 需要 40 秒来备份该文件夹,而 python 需要大约 8 分钟。
我是不是哪里错了,或者 Python 在这些任务上总是比较慢
答案1
我复制/粘贴了您的代码,并分别尝试了和bz2
和,发现它们执行的结果相同。您使用的是哪个版本的 Python?上有多少个文件?您是先尝试 tar 命令,然后尝试脚本,还是反过来?(我猜文件缓存可能会稍微扭曲结果,但不会太严重)。gz
tar cjpf
tar czpf
/home/bob/public_html
我刚刚看了一下 TarFile 的实现。ipython
顺便说一下,使用 很容易:
import tarfile
%edit tarfile.TarFile.add
对于目录来说,情况如下:
elif tarinfo.isdir():
self.addfile(tarinfo)
if recursive:
for f in os.listdir(name):
self.add(os.path.join(name, f), os.path.join(arcname, f), recursive, exclude)
我发现随着文件总数的增加,速度会越来越慢。我猜tar
在处理这种情况时可能会更加优化。不过,这只是猜测。