1

我在一个有用的 Bash 脚本中有这一行,但我还没有设法将其翻译成 Python,其中“a”是用户输入的要归档的文件的天数:

find ~/podcasts/current -mindepth 2 -mtime '+`a`+' -exec mv {} ~/podcasts/old \;

对于最通用的跨平台元素,我熟悉 os.name 和 getpass.getuser。我也有这个函数来生成相当于 ~/podcasts/current 的所有文件的全名列表:

def AllFiles(filepath, depth=1, flist=[]):
    fpath=os.walk(filepath)
    fpath=[item for item in fpath]
    while depth < len(fpath):
        for item in fpath[depth][-1]:
            flist.append(fpath[depth][0]+os.sep+item)
        depth+=1
    return flist

首先,必须有更好的方法来做到这一点,欢迎提出任何建议。无论哪种方式,例如,“AllFiles('/users/me/music/itunes/itunes music/podcasts')”都会在 Windows 上给出相关列表。大概我应该能够检查这个列表并调用 os.stat(list_member).st_mtime 并将所有超过某个天数的东西移到存档中;我有点坚持这一点。

当然,任何带有 bash 命令简洁的东西也会很有启发性。

4

4 回答 4

5
import os
import shutil
from os import path
from os.path import join, getmtime
from time import time

archive = "bak"
current = "cur"

def archive_old_versions(days = 3):
    for root, dirs, files in os.walk(current):
        for name in files:
            fullname = join(root, name)
            if (getmtime(fullname) < time() - days * 60 * 60 * 24):
                shutil.move(fullname, join(archive, name))
于 2008-09-23T02:39:18.447 回答
3
import subprocess
subprocess.call(['find', '~/podcasts/current', '-mindepth', '2', '-mtime', '+5',
                 '-exec', 'mv', '{}', '~/podcasts/old', ';'], shell=True)

这不是开玩笑。这个 python 脚本将完全执行 bash 脚本的工作。

编辑:在最后一个参数上删除了反斜杠,因为它不需要。

于 2008-09-23T03:05:37.027 回答
2

这不是 Bash 命令,而是find命令。如果你真的想把它移植到 Python 上,这是可能的,但你永远无法编写出如此简洁的 Python 版本。find经过 20 多年的优化,在操作文件系统方面表现出色,而 Python 是一种通用编程语言。

于 2008-09-23T01:34:37.447 回答
0
import os, stat
os.stat("test")[stat.ST_MTIME]

会给你mtime。我建议修复那些 in walk_results[2],然后递归调用每个 dir 中的函数walk_results[1]

于 2008-09-23T01:38:31.870 回答