모든 항목을 읽는 대신 디렉터리 내용을 스트리밍합니다. [닫기]

모든 항목을 읽는 대신 디렉터리 내용을 스트리밍합니다. [닫기]

디렉토리의 항목/내용을 스트리밍하는 데 사용할 수 있는 unix 명령이 있습니까? Node.js를 사용하면 모든 것을 메모리로 읽을 수 있습니다.

fs.readdir(dir, (err, items) => {});

하지만 저는 천만 개가 넘는 폴더/파일이 포함된 매우 큰 디렉터리의 스트리밍 프로젝트를 찾고 있습니다.

tail명령은 TMK 폴더가 아닌 파일을 읽기 위한 것입니다. 그러면 폴더의 내용을 스트리밍할 수 있는 Unix 유틸리티가 있습니까?

답변1

시스템 수준에서 이 readdir(3)호출은 오류가 발생하거나 목록이 모두 소진될 때까지 디렉터리 항목 스트림을 반환하는 데 사용됩니다.

 The readdir() function returns a pointer to the next directory entry in
 the named directory stream dirp.  It returns NULL upon reaching the end
 of the directory or detecting an invalid seekdir() operation.

fs.readdir이것이 위와 매핑되는지 여부와 방법은 함수가 JavaScript에서 어떻게 구현되는지에 따라 달라집니다. fs.readdir개별 디렉토리 항목을 한 번에 메모리로 읽는 대신 순차적으로 호출할 수 있는 메서드가 있을 수 있습니다.

readdir(3)재귀적이지 않습니다. 이를 위해 하위 디렉터리의 내용을 확인하지 않으며 fts(3)일반적으로 호출이 사용됩니다. 더 높은 수준의 언어를 사용할 수도 있고 fts(3), 루프 중에 각각의 새로운 하위 디렉터리를 찾기 위해 연속적인 opendir, readdir및 호출을 수동으로 반복할 수도 있습니다 .closedirreaddir(3)

특정 고급 언어 구현은 많은 수의 파일에 비효율적일 수 있습니다. Go 언어에는 동시 파일 시스템의 재귀 구현이 있으며 수년에 걸쳐 구현에 대한 다양한 수정이 이루어졌습니다.

답변2

Unix에서는 이 find명령을 사용하여 파일, 디렉터리 또는 둘 다를 스트리밍할 수 있습니다. 가장 기본적인 명령은 다음과 같습니다.

$ find . 

그러면 파일 및 디렉터리 목록이 스트리밍되어 다른 명령으로 파이프될 수 있습니다. 또는 내장된 기능을 |사용하여 .find-exec

$ find . -type f -exec grep <somestring> {} \;

또는

$ find . -type f | ....

단일 디렉터리의 내용만 원하는 경우 스위치를 사용하여 조회를 제한할 수 있습니다 -depth.

$ find . -type f -depth 1 | ....

관련 정보