我正在尝试用 python 编写一个简单的备份脚本,其中我尝试列出我选择的特定目录中 24 小时前的文件。
我阅读了 find 的手册并使用了
查找 . -mtime 1 > log.dat
获取 log.dat 中的文件列表,但我也获得了该列表中的路径信息
./hpc06MatlabCodes/2011/Apr/3dBoxModel
./hpc06MatlabCodes/2011/Apr/3dBoxModel/vfluidIrca10.dat ./hpc06MatlabCodes/2011/Apr/3dBoxModel/vLRecoveredSystem.mat
有没有办法排除目录并仅获取文件列表。Greetz,Umut
答案1
添加“-type f”标志来查找:
$ find . -type f -a -mtime 1 > log.dat
(-a
是‘and’——它是默认连词,但我喜欢指定它,以防默认值在将来的某个时间点发生变化。)
答案2
由于您使用 python 执行此操作,因此我将使用:
def get_old_files(topdir, howold=24*3600):
import os, time
now = time.time()
filelist = []
def traverse_links(filename):
if not os.path.islink(filename):
return filename
return traverse_links(os.path.normpath(
os.path.join(os.path.dirname(filename), os.readlink(filename)))))
for dirpath, dirnames, filenames in os.walk(topdir):
for name in [traverse_links(os.path.join(dirpath, f)) for f in filenames]:
try:
if os.path.isfile(name) and now - os.path.getmtime(name) > howold:
filelist.append(name)
except OSError:
pass # ignore bad symlinks
return filelist
这应该可以满足您的要求,您还可以添加一个可选参数来缩减目录。使用这个方法比调用它的优点在于,find
生成新进程所涉及的额外开销比在进程内完成所有操作要少。