#!/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文件移动到每日目录中。 现在,如果它移动相同的.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 ......
答案 0 :(得分:3)
我的回答可能不是特别的问题, 如果你看看linux中的logrotate实用程序可能是值得的。 这将自动旋转您的日志文件,重命名不是问题。 这是logrotate
的一个很好的例子如果没有建设性,请传递它。
答案 1 :(得分:2)
只需计算dir中的文件数:
count = len(os.listdir(path))
假设dir中已有一个文件,那么这将产生一个name1的字符串:
new_name= "name%s.log" % count
如果你想写一个新文件(似乎不是这种情况):
with open (outfile, 'w') as of:
...
如果您只想重命名文件,请使用os.rename
:
os.rename(source/old_name,destination/new_name)
答案 2 :(得分: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)