1

ディレクトリを再帰的にリッピングし、ファイルが変更されているかどうかを確認する簡単なスクリプトを作成しようとしています。これまでのところ、トラバーサルしかありません:

import fnmatch
import os 
from optparse import OptionParser

rootPath = os.getcwd() 
pattern = '*.js' 

for root, dirs, files in os.walk(rootPath):    
    for filename in files:        
        print( os.path.join(root, filename))

2 つの問題があります。

1. ファイルが変更されたかどうかを確認するにはどうすればよいですか?

2. ディレクトリが変更されたかどうかを確認するにはどうすればよいですか? -トラバースしたいフォルダが巨大なので、これを行う必要があります。ディレクトリが変更されているかどうかを確認でき、変更されていないディレクトリを再帰的にリッピングしない場合、これは非常に役立ちます。

ありがとう!

4

4 に答える 4

2

2 つのフォルダー間で 2 つのファイルを比較する場合は、両方のファイルでos.path.getmtime()を使用して結果を比較できます。それらが同じである場合、それらは変更されていません。これは、ファイルとフォルダーの両方で機能することに注意してください。

于 2012-05-11T03:43:31.340 に答える
1

ファイルが変更されたかどうかを知る典型的な迅速な方法は、を使用することですos.path.getmtime(path)(Linux または同様の環境を想定)。これにより、変更のタイムスタンプが得られ、保存されているタイムスタンプと比較して、ファイルが変更されたかどうかを判断できます。

getmtime()ディレクトリでも機能しますが、ディレクトリでファイルが追加、削除、または名前変更されたかどうかのみを通知します。ディレクトリ内でファイルが変更されたかどうかはわかりません。

于 2012-05-11T03:46:41.893 に答える
0

コマンド ライン ツールの使用を認めることができればrsync、車輪を再発明する代わりに使用できます。rsyncファイルの変更時間とファイル サイズを使用して、ファイルが変更されたかどうかを判断します。

rsync --verbose --recursive --dry-run dir1 dir2と のファイルの違いを取得する必要がdir1ありますdir2。出力をログ ファイルに書き込んで処理することができます。

于 2012-05-11T08:26:32.990 に答える
0

これは、あなたが探しているかもしれないものの私自身の実装です。タイムスタンプのほかに、追加または削除されたファイルも追跡したい場合があることに注意してください(私のように)。そうでない場合は、オンラインでコードを変更できます。

if now == before:

コードは次のとおりです。

# check if any txt file in folder "wd" has been modified (rewritten added or deleted)
def src_dir_modified(wd):
    now = []
    global before
    all_files = glob.glob(os.path.join(wd,'*.txt'))

    for infile in all_files:
        now.append([infile, os.stat(infile).st_mtime])
    if now == before: # compare files and their time stamps
        return False
    else:
        before = now
        print 'Source code has been modified.'
        return True
于 2012-05-11T07:58:10.000 に答える