Node.js でディレクトリ内のファイルパスを再帰的に取得するワンライナー

2024-04-02

Node.js の fs.readdir を使った再帰ディレクトリ検索

readdir を使って再帰的にディレクトリを検索するには、次の手順を実行する必要があります。

  1. fs モジュールを読み込みます。
  2. 検索を開始するディレクトリを指定します。
  3. readdir 関数を呼び出して、ディレクトリ内のファイル名のリストを取得します。
  4. ファイル名のリストをループ処理し、各ファイルに対して次のいずれかの操作を実行します。
    • ファイルがディレクトリの場合は、そのディレクトリに対して再帰的にステップ 3 と 4 を実行します。
    • ファイルがファイルの場合は、そのファイルを読み込みます。

次のコードは、fs.readdir を使って再帰的にディレクトリを検索する例です。

const fs = require('fs');

function readdirRecursive(dir) {
  fs.readdir(dir, (err, files) => {
    if (err) throw err;

    files.forEach(file => {
      const filePath = `${dir}/${file}`;

      fs.stat(filePath, (err, stats) => {
        if (err) throw err;

        if (stats.isDirectory()) {
          readdirRecursive(filePath);
        } else {
          // ファイルを読み込む
          console.log(filePath);
        }
      });
    });
  });
}

// 検索を開始するディレクトリを指定
const dir = '/path/to/directory';

readdirRecursive(dir);

このコードは、/path/to/directory ディレクトリとそのサブディレクトリ内のすべてのファイルを読み込み、ファイルパスをコンソールに出力します。

注意事項

  • readdir 関数は非同期関数なので、コールバック関数を指定する必要があります。
  • 大量のファイルを読み込む場合は、メモリ使用量に注意する必要があります。

関連用語

  • Node.js
  • fs モジュール
  • readdir
  • 再帰ディレクトリ検索

日本語での情報

Node.js の fs.readdir を使った再帰ディレクトリ検索については、日本語で書かれた情報もたくさんあります。上記のリンク以外にも、以下のサイトを参考にしてみてください。




Node.js の fs.readdir を使った再帰ディレクトリ検索のサンプルコード

const fs = require('fs');

function readdirRecursive(dir) {
  fs.readdir(dir, (err, files) => {
    if (err) throw err;

    files.forEach(file => {
      const filePath = `${dir}/${file}`;

      fs.stat(filePath, (err, stats) => {
        if (err) throw err;

        if (stats.isDirectory()) {
          readdirRecursive(filePath);
        } else {
          // ファイルを読み込む
          console.log(filePath);
        }
      });
    });
  });
}

// 検索を開始するディレクトリを指定
const dir = '/path/to/directory';

readdirRecursive(dir);

コードの説明

  • require('fs') は、fs モジュールを読み込みます。
  • readdirRecursive 関数は、指定されたディレクトリとそのサブディレクトリ内のすべてのファイルを読み込みます。
  • files.forEach ループは、ファイル名のリストをループ処理します。
  • fs.stat 関数は、ファイルのステータスを取得します。
  • if (stats.isDirectory()) は、ファイルがディレクトリの場合は、readdirRecursive 関数を再帰的に呼び出します。
  • if (!stats.isDirectory()) は、ファイルがファイルの場合は、ファイルパスをコンソールに出力します。

実行方法

このコードを実行するには、次の手順を実行します。

  1. コードをファイルに保存します。
  2. ファイルを Node.js で実行します。
node filename.js

出力結果

このコードの出力結果は、次のようになります。

/path/to/directory/file1.txt
/path/to/directory/file2.txt
/path/to/directory/subdirectory/file3.txt
/path/to/directory/subdirectory/file4.txt
  • このコードは、基本的な例です。必要に応じて、コードを変更して、さまざまな機能を追加できます。
  • 例えば、ファイルの内容を読み込む、ファイルのサイズを取得する、ファイルの変更日時を取得するなどの機能を追加できます。



Node.js で再帰ディレクトリ検索を行う他の方法

fs.walk は、Node.js 10.12.0 以降で導入された新しい API です。fs.readdir よりも効率的で使いやすいという特徴があります。

const fs = require('fs');

function readdirRecursive(dir) {
  fs.walk(dir, (err, files) => {
    if (err) throw err;

    files.forEach(file => {
      // ファイルの処理
    });
  });
}

// 検索を開始するディレクトリを指定
const dir = '/path/to/directory';

readdirRecursive(dir);

第三者ライブラリを使う

readdir-recursiverecursive-readdir などの第三者ライブラリを使う方法もあります。これらのライブラリは、fs.readdirfs.walk よりもさらに使いやすく、さまざまな機能が提供されています。

const readdirRecursive = require('readdir-recursive');

// 検索を開始するディレクトリを指定
const dir = '/path/to/directory';

const files = readdirRecursive(dir);

// ファイルの処理

ジェネレータを使う方法もあります。ジェネレータを使うと、コードをより簡潔に書くことができます。

function* readdirRecursive(dir) {
  const files = yield fs.readdir(dir);

  for (const file of files) {
    const filePath = `${dir}/${file}`;

    const stats = yield fs.stat(filePath);

    if (stats.isDirectory()) {
      yield* readdirRecursive(filePath);
    } else {
      // ファイルの処理
    }
  }
}

// 検索を開始するディレクトリを指定
const dir = '/path/to/directory';

const generator = readdirRecursive(dir);

// ファイルの処理
  • 効率と使いやすさを重視する場合は、fs.walk を使うのがおすすめです。
  • さまざまな機能が必要な場合は、第三者ライブラリを使うのがおすすめです。
  • コードを簡潔に書きたい場合は、ジェネレータを使うのがおすすめです。

関連用語

  • fs.walk
  • readdir-recursive
  • recursive-readdir
  • ジェネレータ

node.js readdir


.envファイルって何?Node.jsで環境変数を安全に管理する方法

Node. jsは、process. envオブジェクトを通じて環境変数にアクセスできます。これは、キーと値のペアのオブジェクトです。上記の例では、PORTとDATABASE_URLという環境変数を取得しています。dotenvライブラリは、.envファイルから環境変数を簡単に読み込むことができます。...


jsdomとxmldomでXMLを自在に操る!Node.jsプログラミング

このチュートリアルでは、Node. jsでDOMParserを使用してXMLを解析する方法について解説します。DOMParserとはDOMParserは、HTMLやXML文書を解析し、それを操作するためのDOM(Document Object Model)ツリーを作成するJavaScript APIです。ブラウザ環境でよく使用されますが、Node...


npm-check-updates と Renovate を使った package.json バージョン自動更新

このチュートリアルでは、Git、Node. js、npm を使用して、package. json ファイルのバージョンを自動的に更新する方法を説明します。package. json ファイルは、Node. js プロジェクトで必要な依存関係を定義します。 新しいバージョンがリリースされると、これらの依存関係を更新する必要があります。 手動で更新するのは面倒な作業になるため、自動化することが重要です。...


【保存版】Express でカスタム favicon を設定して、オリジナリティあふれる Web アプリに仕上げよう

方法 1: express. static ミドルウェアを使用するexpress. static ミドルウェアをインストールします。以下のコードをアプリケーションの app. js ファイルに追加します。方法 2: serve-favicon パッケージを使用する...


Node.js pathモジュール完全ガイド:path.resolveとpath.joinを使いこなしてファイルパス操作をマスターしよう

出力されるパスの種類path. resolve: 常に絶対パスを出力します。path. join: 最初のパラメータが絶対パスの場合は絶対パス、そうでなければ相対パスを出力します。現在の作業ディレクトリの影響path. resolve: 最初のパラメータが相対パスの場合、現在の作業ディレクトリを基準に絶対パスを生成します。...