2012-06-29 15 views
0

문제; 다음으로파이썬에서 특정 날짜 이후에 수정 된 파일/폴더 찾기

,

def mod(): 
    """Find files modified today, given a file path.""" 
    latest = 0 
    now = time.strftime('%Y-%m-%d', time.localtime()) 
    dir = "/home/y33t/" 
    for fname in os.listdir(dir): 
     if fname.endswith(''): 
      modtime = os.stat(os.path.join(dir, fname)).st_mtime 
      if modtime > latest: 
       latest = modtime 
       out = time.strftime('%Y-%m-%d', time.localtime(latest)) 
       if out == now: 
        print fname, "has changed today. " 
       else: 
        pass 

내가 결정할 수 있습니다 : 파일/디렉토리 구조에서 특정 날짜 이후에 변경되고 (물론 제목에 명확하게 명시된 바와 같이) 다른 위치로이 복사되는 폴더를 (발견 어떤 파일은 특정 날짜에서 변경 한 위치에 이러한 복사하는 내가 달성하고 싶은 무엇입니까뿐만 아니라 디렉토리 구조를 유지하는 예는 다음과 같습니다;.. 그래서

/testfolder 
..somefile1 
..somefile2 
../testfolder2 
....somefile3 
....somefile4 

와 ...

somefile3이 지정된 날짜에 변경되었다고 말하면 다른 위치에 저장하지만 저장할 때 계단식 디렉토리 구조도 유지해야합니다. 나는 이것을 어떻게 우아한 방법으로 얻을 수 있는가?

답변

1

복사하기 전에 읽기를 해결해야합니다. os.listdir은 한 레벨 만 제공하고 os.walk은 모든 파일을 넘길 수있게 해줍니다.

복사하려면 먼저 os.makedirs(target-path)을 사용하여 임의의 깊이에서 루트에서 대상 폴더까지 모든 폴더를 만든 다음 shutil.copy을 사용하여 파일을 복사합니다.

+0

내가 제공 한 코드를 시도하고 결과를 체크 아웃 했습니까? – y33t

+0

폴더 구조를 만들지 않았고 코드를 시도했습니다 :) 그러나 정확히 무엇을하는지 압니다. somefile3 및 somefile4와 같은 더 깊은 레벨의 파일/폴더가 아닌 기본 폴더 (/ home/y33t /)에있는 파일 목록 만 사용합니다. 두 번째 실수는 반환 된 목록의 모든 내용을 파일로 가져 오는 것입니다. testfolder2 mtime을 검사해서는 안됩니다. 그러나 찾아 보았다. 고정 된 함수 범위 변수 대신 기본 폴더를 매개 변수로 사용하여 재귀 적으로 os.listdir을 호출하여이 작업을 수행 할 수 있습니다. 그러나, os.walk는 이런 종류의 재치있는 걷기에 대해 나에게 더 이해가됩니다. * :) – hasanyasin

관련 문제