web-dev-qa-db-ja.com

1日または24時間より古い特定のディレクトリ内のファイルを一覧表示する

pythonに簡単なバックアップスクリプトを書き込もうとしています。ここでは、選択した特定のディレクトリに24時間経過したファイルを一覧表示しようとしています。

検索のマニュアルを読んで使用しました

見つける。 -mtime 1> log.dat

log.dat内のファイルのリストを取得しますが、そのリスト内のパス情報も取得します。

./hpc06MatlabCodes/2011/Apr/3dBoxModel
./ hpc06MatlabCodes/2011/Apr/3dBoxModel/vfluidIrca10.dat ./hpc06MatlabCodes/2011/Apr/3dBoxModel/vLRecoveredSystem.mat

ディレクトリを除外してファイルリストのみを取得する方法はありますか。グリーツ、ウムット

2
Umut Tabak

'-type f'フラグを追加して、以下を検索します。

$ find . -type f -a -mtime 1 > log.dat

-a is'and'-これはデフォルトの接続詞ですが、将来のある時点でデフォルトが変更される場合に備えて指定したいと思います。)

1
Majenko

あなたがこれをしているのは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を呼び出すよりもこれを使用する利点は、プロセス内ですべてを実行するのではなく、新しいプロセスの生成に伴う余分なオーバーヘッドです。

1
Arcege