나는 내가 선택할 수있는 특정 디렉토리에서 24 시간 오래된 파일을 나열하려고하는 간단한 스크립트를 파이썬으로 작성하려고합니다.
찾기 및 사용 설명서를 읽었습니다.
찾아라. – 시간 1 & gt; log.dat
그러나 log.dat에있는 파일 목록을 얻으려면 해당 목록의 경로 정보도 얻습니다.
./hpc06MatlabCodes/2011/Apr/3dBoxModel
./hpc06MatlabCodes/2011/Apr/3dBoxModel/vfluidIrca10.dat
./hpc06MatlabCodes/2011/Apr/3dBoxModel/vLRecoveredSystem.mat
디렉토리를 제외하고 파일 목록 만 가져 오는 방법이 있습니까?
인사말,
Umut
답변
찾을 ‘-type of’플래그를 추가하십시오.
$ find . -type f -a -mtime 1 > log.dat
(그만큼 -a
‘and’입니다. – 기본 연결입니다.하지만 나중에 어떤 점에서 기본값이 변경 될 경우에 대비하고 싶습니다.)
답변
이후 당신이 파이썬 일을하고있다, 내가 사용하는 것입니다 :
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
프로세스 내부에서 모든 작업을 수행하는 것과 달리 새 프로세스를 생성하는 데 소요되는 추가 오버 헤드입니다.