0
#!/usr/bin/python
import os, datetime
import os.path
import sys
import time
import shutil
import re
import itertools

today = datetime.date.today()
todaystr = today.isoformat()

if os.path.exists('/var/log/brd/' + todaystr) is False and os.path.isfile('/var/log/brd/brd.log') is True:
    os.mkdir('/var/log/brd/' + todaystr) 
    shutil.move('/var/log/brd/brd.log', '/var/log/brd/' + todaystr)
    print "Directory Created, Moved Log File" 
    sys.exit()

elif os.path.isfile('/var/log/brd/brd.log') is True and os.path.exists('/var/log/brd/'+todaystr) is True: 
    num_files = sum(1 for file in os.listdir('/var/log/brd/') if os.path.isfile('/var/log/brd/{}/brd.log'.format(todaystr,)))
    next_num = num_files + 1
    os.rename('/var/log/brd/brd.log', '/var/log/brd/' + todaystr + '/blackbird.log_{}'.format(next_num))
    print "Renaming Duplicate"
    sys.exit() 

else:
    print "No Duplicate Found"
    sys.exit()

私の状況:毎日新しいディレクトリ。創造された。days .log ファイルを Daily ディレクトリに移動します。ここで、同じ .log ファイルを移動する場合は、ファイル名 (1、2、3...) の末尾にカウントを追加する必要があります。日付/分/秒を使用してbashでこれを簡単に行うことができますが、最終的にカウントを使用する方法を理解する必要があります。

私はPythonスクリプトにかなり慣れていないので、助けていただければ幸いです。

わかりました...これが更新されたコードです。クリーンアップを開始する前に、すべてを実行しようとしています...

今...それはうまく動作します..ファイルを移動します。もう一度実行すると、最後にカウントが追加されます(最終的には18になります????)。次に、移動/名前変更を再度行うと、_18ファイルが新しいログに置き換えられます...これは私のものであることに注意してください私が今までに書いた最初の Python スクリプト。

e.@IT-105-WS4:~$ touch /var/log/brd/brd.log
e@IT-1~$ python BBdirectory.py 
Renaming Duplicate
e@IT1:~$ ls /var/log/blackbird/2012-10-05
brd.log  brd.log_19
e@IT-1:~$

上記のプロセスを繰り返し、20 21... を作成することはありません。

4

3 に答える 3

3

私の答えは質問に限定されていないかもしれません。Linux の logrotate ユーティリティを見れば、価値があるかもしれません。これにより、ログファイルが自動的にローテーションされ、名前の変更は問題になりません。ここにlogrotateの良い例があります

あなたにとって建設的でない場合は、それを渡します。

于 2012-10-04T12:26:26.217 に答える
2

次のコマンドを使用して、ディレクトリ内のファイルの数を数えるだけです。

count = len(os.listdir(path))

dirにすでに1つのファイルがあるとすると、これによりname1の文字列が生成されます。

new_name= "name%s.log" % count

新しいファイルに書き込みたい場合(そうではないようです):

with open (outfile, 'w') as of:
    ...

ファイルの名前を変更したいだけの場合は、次を使用してos.renameください。

os.rename(source/old_name,destination/new_name)
于 2012-10-04T12:07:02.650 に答える
0

非常に単純なアプローチ(ただし、最終的にはそれほど堅牢ではありません)は次のようになります。

import os
import os.path
import shutil

num_files = sum(1 for fname in os.listdir('/path/to/log/dir/') if os.path.isfile(fname))
next_num = num_files + 1
shutil.move('/path/to/your/file/log.txt', '/path/to/log/dir/log.{}'.format(next_num)
于 2012-10-04T12:18:05.777 に答える