0

Python 2.6 を使用して、ファイル サーバーから古いファイルをアーカイブしようとしています。日付に基づいて tar ファイルを作成しています。以下は私のコードです:

#/usr/bin/python

import os, time, tarfile
from datetime import datetime, date, timedelta
import datetime

path = "/nfs4exports/opt/prod/fmac/files/inbound/test_archive"
count = 0
set_date = '2010-12-17'

base_date = datetime.datetime.strptime(set_date, '%Y-%m-%d')

# Creating dictionary for files to be archived
date_file_dict = {}
for root, subFolders, files in os.walk(path):
        for file in files:
            file = os.path.join(root,file)
            file = os.path.join(path, file)
            stats = os.stat(file)
            c_date = date.fromtimestamp(stats[8]).strftime('%m-%d-%y')
            date_file_tuple = c_date, file
            date_file_dict[file] = c_date

d_list = date_file_dict.values()
dd_list = list(set(d_list))
date_occur_dict = {}

# Adding files to archive and generating log
for search_date in dd_list:
    tar_file = "nas_archive_" + search_date + ".tgz"
    mytar = tarfile.open(tar_file,"w:gz")
    log_file = "archive_log_" + search_date
    fcount = 0
    #print tar_file
    #print log_file
    f = open(log_file,'ab+')
    for f_name, d_date in date_file_dict.iteritems():
        if d_date == search_date:
            fcount += 1
            mytar.add(f_name)
            f.write(f_name + '\n')
    date_occur_dict[search_date] = fcount

# Checking before removing files
for check_count in dd_list:
    if d_list.count(check_count) == date_occur_dict.get(check_count):
        for f_name, d_date in date_file_dict.iteritems():
            if d_date == check_count:
                os.remove(f_name)

上記のコードは完全に正常に動作し、日付 11-15-12 を除いてアーカイブ ファイルとログを正しく生成します。スクリプトを実行するたびにアーカイブ ファイル「nas_archive_11-15-12.tgz」が生成されますが、何らかの理由で破損します。

tar -tzvf nas_archive_11-15-12.tgz
-rw-r--r-- appins/app     1961 2012-11-15 15:09:56 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Input_379a6265-a121-4040-8014-babe397e98ed.txt.gpg
-rw-r--r-- appins/app     2337 2012-11-15 10:25:09 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Input_839c5bc5-a6b8-4fef-bb26-e1d8e91b3f84.txt.gpg

gzip: -rw-r--r-- appins/app     5102 2012-11-15 15:04:33 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Input_5c8b315b-7b99-42d3-9cc7-235b72ab9176.txt.gpg
stdin: unexpected end of file
-rw-r--r-- appins/app     1445 2012-11-15 10:19:06 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Output_ad548dea-374c-47c8-a6f4-a6780af0ab43.csv.gpg
-rw-r--r-- appins/app     1344 2012-11-15 15:13:48 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Output_66d20187-1e99-438d-9860-73d0fa6ead04.csv.gpg
-rw-r--r-- appins/app     2635 2012-11-15 16:09:51 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Output_894a2cd2-1e39-46a9-b805-201b5d430181.csv.gpg
-rw-r--r-- appins/app     3997 2012-11-15 15:02:32 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Input_6104d8b7-47fd-4d49-aa7e-1e0fc404fbcb.txt.gpg
-rw-r--r-- appins/app     2603 2012-11-15 09:46:29 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Input_e23cf5f5-11de-45c5-a2d3-2403a28068fe.txt.gpg
-rw-r--r-- appins/app     2325 2012-11-15 14:37:06 nfs4exports/opt/prod/fmac/files/inbound/test_archive/Input_882db028-1a06-422f-9192-fe3fc58e2e3f.txt.gpg
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

ディスク容量も確認しましたが、問題ありません。タッチを使用して「2012 年 11 月 15 日」のファイルを手動で作成しようとしましたが、そのアーカイブ ファイルも破損しています。他のアーカイブ ファイルはまったく問題なく、問題なく復元できます。ここで問題を指摘できる人はいますか?

4

1 に答える 1