Directory

流目錄的內容而不是讀取所有項目

  • September 3, 2018

是否有我可以用來流式傳輸目錄的項目/內容的 unix 命令?使用 Node.js,我們可以將所有內容讀入記憶體:

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

但我希望流式傳輸項目,對於一個非常大的目錄,比如其中包含超過 1000 萬個文件夾/文件。

tail命令用於讀取文件而不是文件夾 TMK,那麼是否有一些 unix 實用程序可以流式傳輸文件夾的內容?

在 Unix 中,您可以使用find命令流式傳輸文件和目錄或兩者。最基本的命令是這樣的:

$ find . 

這將流式傳輸文件和目錄列表,然後可以通過管道將其傳遞給另一個命令,|或者您可以使用find’ 的內置功能通過-exec.

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

或者

$ find . -type f | ....

如果您只想要單個目錄的內容,您可以通過-depth開關限制查找:

$ find . -type f -depth 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和呼叫。closedir``readdir(3)

對於大量文件,特定的高級語言實現可能效率低下;我相信 Go 語言有一個並發的文件系統遞歸實現,並且多年來已經對實現進行了各種修復。

引用自:https://unix.stackexchange.com/questions/466319