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))

假设目录中已经有一个文件,那么这将产生一串名称1:

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 回答