2014-01-10 4 views
0

파일이있는 디렉토리가 있습니다. 이 아카이브는 매우 크고 내부에 150 만개의 pdf 파일이 있습니다.
디렉토리는 OS V7R1이있는 IBM i 서버에 저장되며 시스템은 새롭고 매우 빠릅니다.
파일은 다음과 같이 명명되지 않은 :거대한 디렉토리의 파일 찾기 - 매우 느림

invoice_[custno]_[year']_[invoice_number].pdf 
invoice_081500_2013_7534435564.pdf  

내가 셸을 사용하여 찾기 명령을 사용하여 파일을 찾으려고 없음.

find . -name 'invoice_2013_*.pdf' -type f | ls -l > log.dat 

명령이 오래 걸리므로 아무런 결과없이 작업을 중단했습니다.

작은 디렉토리로 시도해도 문제가 없습니다.

나중에 나는 금욕의 날을 보내고 지난 24 시간 동안 만들어진 파일을 찾지 만 나는 너무 늦어서 잊어 버릴 수있다.

답변

4

lsstdin의 파일 이름을 읽지 않으므로 호출이 작동하지 않습니다.

가능한 해결책은 다음과 같습니다 일치하는 각 파일에 대한 ls -l을 실행

find . -name 'invoice_2013_*.pdf' -type f -ls > log.dat 

 

사용 find 유틸리티의 -exec 옵션 :

find 유틸리티에 내장 된 목록 옵션을 사용

find . -name 'invoice_2013_*.pdf' -type f -exec ls {} \; > log.dat 

 

파이프에게 xargs 유틸리티 파일 이름을하고 매개 변수로 파일 이름과 ls -l을 실행하자 : 하나의 디렉토리에 150 만 개 파일의 패턴 검색에가는

find . -name 'invoice_2013_*.pdf' -type f | xargs ls -l > log.dat 

어떤 파일 시스템에서도 비효율적이다.

1

디렉토리의 새 항목 목록 만 보려는 경우 journaling the directory을 고려할 수 있습니다. 디렉토리의 모든 파일을 저널링하지 않으려면 INHERIT(*NO)을 지정하십시오. 그런 다음 최근의 업무 일지 항목을 DSPJRN으로 간단히 추출하여 어떤 객체가 추가되었는지 확인할 수 있습니다.

0

나는 하나의 디렉토리에 15k 개 이상의 파일을 넣지 않을 것이라고 생각합니다. 일부 QShell 유틸리티는 약 16k 파일에서 문제가 발생합니다. 그러나 어떤 경우에도 디렉토리에 저장할 수 있을지 확신하지는 않습니다. 16MB가 넘는 파일을 제외하고는 전체 파일의 상당 부분을 제외하고는 제외합니다. 먼저 CLOB/BLOB에 데이터베이스에 저장하는 것이 좋습니다.

개별 스트림 파일 개체로 저장하면 해결해야 할 소유권/권한 문제가 발생합니다. 일부 프로파일은 소유 오브젝트 테이블에 항목을 가져오고 있으며 프로파일이 꽤 커질 것으로 예상됩니다. 아마도 하나 이상의 한계에 도달했을 것입니다.

데이터베이스에 저장하면 하나의 소유 객체가 삭제됩니다.

또는 비슷한 개체 ... 2 차 또는 3 차 테이블로 행을 이동시키는 제거/보관 프로세스가있을 수 있습니다. 그것이 어떻게 구조화 될 필요가 있는지를 짐작하기는 어렵다.

저축으로 특히 SAVSECDTA 및 SAV 저장에 도움이 될 수 있습니다. 보안 데이터가 크게 줄어 듭니다. 그리고 4GB 테이블을 저장하는 것은 4MB 개체 (또는 고장이 무엇이든간에)를 절약하는 것보다 빠릅니다.

원래 설치 및 구현 방법을 사용자 환경에서 결정하는 것 외에 큰 변동 사항은 변동성과 관련 될 수 있습니다. 이들이 비교적 적은 변화와 적은 삭제로 안정된 객체라면 괜찮을 것입니다. 그러나 BLOB가 자주 수정되는 경우 테이블이 DASD 용량의 상당 부분을 차지하면 문제가 발생할 수 있습니다. 그것은 DASD 여유 공간의 크기를 초과하고 re-org가 필요할 때 특히 거칠게됩니다. 휘발성이 낮아 걱정거리가 적습니다.

0

huge directory에서 검색 및 파일 또는 특정 부분 코딩의 빠른 프로세스를 개선하려면 아래 코드를 사용하십시오.

INHERIT(*NO)