Python小例子---扫描目录
这是一个功能非常简单的小程序。它从命令行接受一个目录作为参数,然后对此目录进行
扫描,获得各个目录下文件的大小以及最后访问时间,并将其存入文件。
唯一值得一提的是os.path.walk(path, list_dir, None)函数, 它从path出发,
自动搜索其下的所有子目录,并在进入每个子目录的时候使用list_dir函数来处理相关
内容。
list_dir必须能够接受三个参数,dirname是当前目录名,filesindir是当前目录下
的文件列表。
if 你只是对程序本身有点兴趣
please goto 最后的代码段
有些时候我们可能会关心某个程序运行以后会给我们的文件系统带来什么样的变化。比如
我通过make install安装的包都往我的系统里写了些什么东西;又或者看看我的home下
有那些文件是被经常访问的,也许我应该定期将这些文件备份一下。
所以我原本的目的是写一个能够监控某个目录的变化的程序。但是当我用pygtk构造好了
界面框架并添加了部分代码后发现我的工作才刚刚开始。于是我决定暂时搁置原来那个宏
伟的构想,并用一段没有美观的图形界面且功能简单的小程序来代替。
我想我可以通过比较两份不同时间的扫描结果的差别看到达我的目的。而且我还可以美其
名曰,这个小工具复合Unix下小而精的原则。 ^_^
#! /usr/bin/python# -*- coding: utf-8 -*-import osimport sysimport timeimport globfiles = []def list_dir(dummy, dirname, filesindir): files.append(dirname) for fname in filesindir: f = os.path.join(dirname, fname) s = os.lstat(f) files.append(fname+', '+str(s.st_size)+', '+str(s.st_mtime)) files.append("") def scan_dir(path): os.path.walk(path, list_dir, None)def save(filename): f = open(filename, 'w') for n in files: f.write(n+'\n') f.close()if __name__ == "__main__": if len(sys.argv) == 2: scan_dir(sys.argv[1]) s = sys.argv[1].replace('/','_')[1:] s = s + time.strftime("%Y.%m.%d_%H.%M.%S",time.localtime()) + '.txt' save(s) else: print "Usage: ds.py [file]\n"