我的目标是使用python 2.6将归档文件成员提取到具有原始时间戳的不同位置。
例如:
tar -tzvf nas_archive_11-15-12.tgz
-rw-r--r-- appins/app 2337 2012-11-15 10:25:09 nfs4exports/opt/prod/fmac/files/inbound/test_archive/a.txt.gpg
我想将上面的文件恢复到"/nfs4exports/opt/prod/fmac/filess/inbound/test_archive/11-15-12/a.txt.gpg",因为它上次修改是在2012年11月15日。
我创建了以下脚本:
#!/usr/bin/python
import os, tarfile
from datetime import datetime, date, timedelta
import datetime
a_path = '/home/appins/.scripts/'
for root, subFolders, files in os.walk(a_path):
for file in files:
if file.startswith("nas_archive"):
print file, " is getting extracted"
mytar = tarfile.open(file)
for member in mytar.getmembers():
if member.isreg():
myname = '/' + member.name
path_list = myname.rsplit('/')[1:]
print path_list
member.name = os.path.basename(member.name)
i_base = 'inbound'
i = -1
for index,value in enumerate(path_list):
if value == i_base:
i = index
break
if i == -1:
print i_base, " not found"
else:
path_list.insert(index + 2, '11-15-12')
path_list.remove(member.name)
print path_list
newpath = '/' + os.path.join(*path_list)
print newpath
mytar.extract(member,newpath)
这个脚本按预期工作,但它提取的文件具有今天的时间戳,而不是原始时间戳。在这里,我将无法使用extractall方法,因为我正在根据每个文件的原始路径分别计算路径。有没有一种方法可以让我用原始时间戳将文件恢复到新位置?
您需要查看TarInfo
对象的mtime
属性:
import tarfile
tar = tarfile.open('tarfile.tar')
for member in tar.getmembers():
print member.name, member.mtime
给定mtime
值,您可以使用os.utime
设置访问和修改时间戳,因此:
import os
os.utime('file', (mtime, mtime))