2016-08-23 57 views
2

我想寫一個python 3腳本,將壓縮目錄/home/pi/results的內容並將其複製到另一個文件夾/home/pi/backups
我需要能夠多次運行此腳本,並且每次都會根據以前的歸檔命名結果歸檔。所以第一次運行會創建backup001.tgz,第二次運行將創建backup002.tgz等。每個備份將是一個完整的備份,包含該目錄中的任何內容。python3腳本來壓縮目錄和動態命名存檔

我已經想出瞭如何將文件夾壓縮到.tgz,我只是不知道如何根據以前的備份追加一個數字。

tar=tarfile.open(backupdir+'backup.tgz', "w:gz") 
      tar.add(resultspath, arcname=os.path.basename(resultspath)) 
      tar.close() 

回答

0

也許使用時間戳嗎?然後,你會第一眼就知道你正在尋找哪個特定的備份。

import datetime 

date = datetime.datetime.utcnow().isoformat() 
filename = 'backup-{}.tgz'.format(date) 
filepath = os.path.join(backupdir, filename) 

tar=tarfile.open(filepath, "w:gz") 
     tar.add(resultspath, arcname=os.path.basename(resultspath)) 
     tar.close() 
+0

雖然不是嚴格意義是什麼我問,它是一個更好的主意,用時間戳來代替。我將它從utcnow()更改爲now()以使用我的時區。唯一的問題是時間部分包含冒號,而tar在文件名中明顯存在問題。只需要弄清楚如何將冒號改爲下劃線,我今晚下班時會這樣做。 – Lightmaster

+0

''date = datetime.datetime.utcnow()。strftime(「%b_%d_%Y_%H_%M_%S」)'' – turkus

+0

@Lightmaster檢查你可以放入strftime方法的其他變量。無論如何,如果它是更好的答案,你可以批准這個答案。 – turkus

1
import os 
latest_file = sorted(os.listdir('/home/pi/backups'))[-1] 

這應該給你最新的文件名。下一個可以從這個名字中找出來。

0

你可以嘗試過濾/計數方式:

# we set the path, and the word key that we are looking for 
path = '/home/user/backups' 
word_key = 'backup-' 

# we count the occurrences and generate a new filename from it 
backups_count = len(filter(lambda x : word_key in x, os.listdir(path))) 
filename = 'backup-{}.tgz'.format(backups_count) 
0

使用glob獲得備份的列表已經存在
使用max()custom key找到最後一個
使用string formatting到創建下一個文件名稱

import glob 
filelist = glob.glob('Backup???.tgz') 
last = max(filelist, key = lambda x: x[6:9]) 
filename = 'Backup{0:03d}.tgz'.format(int(last[6:9])+1) 
print filename 

(輸出Backup003.tgz爲包含Backup001.tgz & Backup002.tgz目錄)

+0

雖然這在技術上正是我所要求的,但提供時間編碼文件名的答案@turkus對我來說效果更好。我點擊了你的答案的投票圖標,但顯然我必須在他們出現之前獲得15的聲望。 – Lightmaster