2009-08-28 1 views
2

나는 리눅스의 32,000 서브 디렉토리 제한에 부딪쳤다. 그것은 내 PHP 스크립트에 문제를 일으켰고 다시는 발생하지 않기를 바랍니다.매우 큰 디렉토리의 정보 검색

간단한 해결책은 다른 하위 디렉토리를 만들기 전에 PHP 스크립트가 현재 하위 디렉토리 수를 확인하도록하는 것입니다.

이러한 검사를 수행 한 모든 아이디어는 전체 디렉토리를 반복하고 모든 폴더를 세는 것을 포함합니다. 내 관심사가 매우 큰 디렉토리에 있다고 생각하면 포함 된 파일/폴더의 수를 검색하는 더 좋은 방법이 있습니까?

보너스 질문 : 디렉토리의 디스크 사용량을 찾는 비 반복적 인 방법이 있습니까?

미리 감사드립니다. 브라이언

+1

** du ** 명령은 폴더의 디스크 사용량을 계산하지만 전체 폴더를 검색하여 PHP에서 수행 할 수있는 것보다 빠릅니다. ** 32,000 개의 하위 폴더가있는 이유는 무엇입니까? ** –

+4

저는 실제 문제는 당신이 32k 폴더를 가지고 있다는 사실입니다. 이유는 한계가 있습니다. –

답변

4

더 좋은 방법은 디렉토리 레이아웃을 디자인하여 단일 디렉토리에 32000 개의 파일을 저장할 방법이 없기 때문입니다. 사실, 나는 디렉토리에있는 1000 개의 파일조차 너무 많다는 것을 제안 할 것이다.

나는이 문제에 보통 걸리는 접근법에 디렉토리 hierarhy의 여분의 레벨을 포함한다. 일반적인 방법은 현재 저장하고있는 파일 이름을 단일 디렉토리에 저장하고 중첩 된 디렉토리에 해당하는 파일로 분할하는 것입니다. 당신이

xyzzy 
foo 
bar 
blah 

같은 파일의 무리가 있다면 그래서, 당신은 실제로 등등

x/xyzzy 
f/foo 
b/bar 
b/blah 

과로 저장할 수 있습니다. 이 방법의 깊이 대 폭을 비교하기 위해 이것을 여러 디렉토리 레벨로 확장하거나 하나 이상의 문자를 사용하여 서브 디렉토리를 분할 할 수 있습니다.

아마도 32k 파일 제한이없는 파일 시스템을 사용할 것을 제안 받게됩니다. 개인적으로, 그러한 파일 시스템이 있더라도 필자는 여기서 제안한 것처럼 항상 계획을 사용합니다. 매우 많은 수의 파일이있는 디렉토리에서 명령 줄 도구로 효과적으로 작업하는 것은 거의 불가능합니다 (심지어는 ls이 완전히 다루기 힘들어집니다). 수동 탐색은 개발, 디버깅 및 보통 때로는 수시로 필요합니다. 조작.

+0

웁스! 보너스 질문에 답하는 것을 잊어 버렸습니다. "디렉토리의 디스크 사용량을 찾는 비 반복적 인 방법"을 사용하면 디렉토리의 모든 파일 크기를 고려하지 않는 방법을 의미하는 경우 대답은 '아니오'입니다. –

+0

Dale - 감사합니다. 내 응용 프로그램에서는 각 사용자가 디렉토리를 가져야하며 사용자가 32000 명 이상이어야합니다. 그러나 극단적 인 예로서 1,000,000 명의 사용자가 있다고 가정 해 봅시다.이 경우 파일 시스템이 어떻게 대용량 디렉토리를 실제로 피할 수 있습니까? – Brian

+0

더 많은 계층 구조를 사용하면 저장할 수있는 이름 수가 기하 급수적으로 증가합니다. 예를 들어, 1000000은 1000 제곱입니다. 영문자 사용자 이름을 가정 할 때 26^2는 676 또는 대략 1000이므로 "us/er/user1", "us/er/user2", "xy/zz/xyzzy", "pl/ug"와 같은 파일 이름을 고려할 수 있습니다/plugh ", 등등. –