列出特定目录中超过 1 天或 24 小时的文件

列出特定目录中超过 1 天或 24 小时的文件

我正在尝试用 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生成新进程所涉及的额外开销比在进程内完成所有操作要少。

相关内容