0

特定の日付範囲内に作成/変更されたディレクトリ内のファイルを取得するコードを記述しようとしています。

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:

方法に関係なく、ユーザーは開始日と終了日の 2 つの日付を入力する必要があります。それらの日付の間に変更/作成されたすべてのファイルを取得します。

4

1 に答える 1

2

1 つのオプションは、次の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))

シェルでやりたい場合findは、次のフラグを使用してください。

-ctime n ファイルのステータスが最後に変更されたのは n*24 時間前です。

-mtime n ファイルのデータが最後に変更されたのは 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 タイムスタンプに変換し、いずれかの日付と比較する必要があります。

于 2012-08-08T15:45:12.223 に答える