我正在尝试编写代码,以获取在特定日期范围内创建/修改的目录中的文件。
我对linux知之甚少,我想知道我可以使用什么命令来获取目录中与我指定的日期范围内匹配的文件列表。
此外,此类查询的正确格式是什么,因为此过程将自动执行,用户只需输入其开始日期和结束日期。
到目前为止的相关代码:
#! /usr/bin/env python
import os
import copy
import subprocess
import optparse
def command(command):
env = copy.deepcopy(os.environ)
proc = subprocess.Popen([command],
shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = proc.stdout.read()
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.add_option("-s", "--startdate", dest = "startdate",\
help = "the starting date of the files to search")
parser.add_option("-e", "--enddate", dest = "enddate",\
help = "the ending date of the files to search")
(options, args) = parser.parse_args()
# commands
file_names = command("get files that match dates command")
我必须在该命令中添加哪些文件名?
修改
相反 - 它不必是一个命令,如果它可以使用纯代码完成,例如os.walk
,那也很好。我知道某些功能在Linux和Windows中并不完全正常,因此有必要提供帮助。
编辑2:
无论采用何种方法,用户都应输入两个日期:开始和结束。然后获取在这些日期之间修改/创建的所有文件。
答案 0 :(得分:2)
一种选择是使用os.walk
行中的某些内容并根据ctime / mtime过滤掉文件,您可以这样做:
import os.path, time
print "last modified: %s" % time.ctime(os.path.getmtime(file))
print "created: %s" % time.ctime(os.path.getctime(file))
如果您更喜欢使用shell,那么find
是您的朋友,并带有以下标志:
-ctime n 文件状态最后一次更改为n * 24小时前。
-mtime n 文件的数据是在* 24小时前修改的。
[编辑]
一个小代码示例,用于获取给定目录(“。”)中文件的修改时间:
import os
from os.path import join
import datetime
def modification_date(filename):
t = os.path.getmtime(filename)
return t
def creation_date(filename):
t = os.path.getctime(filename)
return t
for root, dirs, files in os.walk("."):
for name in files:
print join(root, name), modification_date(join(root, name)), creation_date(join(root, name))
根据您的特定命令行参数实现,您希望将在命令行上传递的内容转换为unix时间戳,并与任一日期进行比较。