Node.jsディレクトリ探索
Node.jsでディレクトリ内のすべてのディレクトリを取得する
Node.jsでは、ファイルシステム操作のためにfs
モジュールが提供されています。このモジュールを使用して、指定されたディレクトリ内のすべてのディレクトリを再帰的に取得することができます。
具体的な手順:
-
fsモジュールのインポート
const fs = require('fs');
-
ディレクトリのパス指定
const directoryPath = '/path/to/your/directory';
-
fs.readdirメソッドの使用
fs.readdir(directoryPath, (err, files) => { if (err) { console.error('Error:', err); return; } files.forEach(file => { const filePath = `<span class="math-inline">\{directoryPath\}/</span>{file}`; fs.stat(filePath, (err, stats) => { if (err) { console.error('Error:', err); return; } if (stats.isDirectory()) { console.log('Directory:', filePath); } }); }); });
コードの解説:
- ディレクトリの場合は、そのパスをコンソールに出力します。
stats.isDirectory()
メソッドを使用して、ファイルがディレクトリであるかどうかをチェックします。fs.stat
メソッドを使用して、ファイルまたはディレクトリのステータスを取得します。files.forEach
ループを使用して、各ファイルまたはディレクトリを処理します。fs.readdir
メソッドは、指定されたディレクトリ内のファイルとディレクトリの名前の配列を返します。
注意事項:
fs.readdir
メソッドは非同期処理であるため、コールバック関数を使用して結果を処理します。- ディレクトリ内のファイルやサブディレクトリを再帰的に処理する場合は、再帰的な関数を作成する必要があります。
pathモジュールを使用した方法:
const fs = require('fs');
const path = require('path');
function getAllDirectories(directoryPath) {
const directories = [];
fs.readdirSync(directoryPath).forEach(file => {
const filePath = path.join(directoryPath, file);
if (fs.statSync(filePath).isDirector y()) {
directories.push(filePath);
directories.push(...getAllDirectories(filePath));
}
});
return directories;
}
const directoryPath = '/path/to/your/directory';
const allDirectories = getAllDirectories(directoryPath);
console.log(allDirectories);
const glob = require('glob');
glob('/path/to/your/directory/**/*.{,.}', { mark: true }, (err, files) => {
if (err) {
console.error('Error:', err);
return;
}
const directories = files.filter(file => file.endsWith('/'));
console.log(directories);
});
-
globモジュール
glob
メソッドを使用して、指定されたパターンに一致するファイルやディレクトリを取得します。mark: true
オプションを使用して、ディレクトリパスにスラッシュを追加します。filter
メソッドを使用して、ディレクトリのみを抽出します。
-
pathモジュール
path.join
メソッドを使用して、ファイルパスを結合します。- 再帰的な関数を使用して、サブディレクトリを探索します。
glob
モジュールはより柔軟なパターンマッチングを提供しますが、パフォーマンスが低下する場合があります。glob
モジュールは外部ライブラリであるため、インストールが必要です。
node.js directory