Node.jsのディレクトリに存在するすべてのファイルの名前のリストを取得するにはどうすればよいですか?


979

Node.jsを使用して、ディレクトリに存在するすべてのファイルの名前のリストを取得しようとしています。ファイル名の配列である出力が必要です。これどうやってするの?


9
fs.readdir動作しますが、などのファイル名グロブパターンは使用できませんls /tmp/*core*github.com/isaacs/node-globをチェックしてください。Globsはサブディレクトリを検索することもできます。
Jess

NPMのreaddir-recursiveモジュールをチェックアウトします。ただし、サブディレクトリでファイルの名前を探している場合も
Ethan Davis


1
fs.readdirはシンプルな非同期ソリューションです-例はここにあります
drorw '18

まだイテレータを使用して答えていませんか?スキャンするファイルが250万個あります... 10分後に2.5mのパスのリストを取得したくありません。
Flavien Volken

回答:


1342

fs.readdirまたはfs.readdirSyncメソッドを使用できます。

fs.readdir

const testFolder = './tests/';
const fs = require('fs');

fs.readdir(testFolder, (err, files) => {
  files.forEach(file => {
    console.log(file);
  });
});

fs.readdirSync

const testFolder = './tests/';
const fs = require('fs');

fs.readdirSync(testFolder).forEach(file => {
  console.log(file);
});

2つの方法の違いは、最初の方法は非同期であるため、読み取りプロセスが終了したときに実行されるコールバック関数を提供する必要があることです。

2つ目は同期で、ファイル名の配列を返しますが、読み取りプロセスが終了するまで、コードの実行を停止します。


204
注:ディレクトリ名readdirも表示されます。これらをフィルタリングするにはfs.stat(path, callback(err, stats))、およびを使用しstats.isDirectory()ます。
Rob W

3
ノードでIOをブロックしたくないので、おそらくreaddireを使用する必要があることを追加します。
DragonKnight、

5
@ user3705055(gulpを使用してソース順依存ファイルのディレクトリを読み取り、それらを単一の実行可能ファイルにコンパイルする場合を除く)。
r3wt 2016


2
@Sancarnの出力を解析してみませんlsか?誰かがスペースと改行が埋め込まれたファイル名を作成するまでお待ちください…
Radon Rosborough 2017

201

このようなタスクを実行するIMOの最も便利な方法は、globツールを使用することです。これがnode.jsのglobパッケージです。でインストール

npm install glob

次に、ワイルドカードを使用してファイル名を一致させます(パッケージのWebサイトから取得した例)

var glob = require("glob")

// options is optional
glob("**/*.js", options, function (er, files) {
  // files is an array of filenames.
  // If the `nonull` option is set, and nothing
  // was found, then files is ["**/*.js"]
  // er is an error object or null.
})

5
文字列比較よりも簡単にファイルタイプを指定したかったので、これは私にとって最良の解決策でした。ありがとう。
ポグリンディス2014年

グロビングはノードの基本的なスキルに近いので、私もこれが好きです。ファイル名だけを取り戻したい場合cwdは、オプションオブジェクトにa を渡します。
jcollum

1
どのようにしてglob外部の結果を得ることができますか?例えば。私console.logは結果を望んでいますが、内部ではありませんglob()か?
ランティ2016

13
@Lanti:このglob.sync(pattern, [options])メソッドは、コールバックを使用するよりも、ファイル名の配列を返すだけなので、使いやすいかもしれません。詳細はこちら:github.com/isaacs/node-glob
Glenn Lawrence

2
私のようなPromiseを使用したglob実装を探している人は、sindresorhusによるglobbyをチェックしてください:github.com/sindresorhus/globby
Nacho Coloma

180

上記の答えは、ディレクトリへの再帰的な検索を実行しません。これが再帰検索のために行ったものです(node-walkを使用:npm install walk

var walk    = require('walk');
var files   = [];

// Walker options
var walker  = walk.walk('./test', { followLinks: false });

walker.on('file', function(root, stat, next) {
    // Add this file to the list of files
    files.push(root + '/' + stat.name);
    next();
});

walker.on('end', function() {
    console.log(files);
});

4
fs.readdirSyncは、このために特別に作成されたネイティブの代替手段です。
Eraden

37
fs.readdirSyncが残念ながらサブディレクトリに足を踏み入れないのは、そのための独自のルーチンを作成するつもりでない限り、この非常に問題を解決するためのnpmモジュールがすでにそこにあるとは言えないためです。
Ruben Tan

6
walk github repo + docsへのリンクは次のとおり
santiagoIT

OPは、どのAPIが再帰的な読み取りを行うかについて質問しませんでした。いずれにせよ、受け入れられた回答は、再帰的な読み取りを行うための基礎としても役立つものを提供します。
Igwe Kalu

これは素晴らしい機能です。簡単な質問:特定のディレクトリを無視する簡単な方法はありますか?私は始まるディレクトリを無視したい.git
j_d

91

すべてのサブディレクトリのファイルを取得する

function getFiles (dir, files_){
    files_ = files_ || [];
    var files = fs.readdirSync(dir);
    for (var i in files){
        var name = dir + '/' + files[i];
        if (fs.statSync(name).isDirectory()){
            getFiles(name, files_);
        } else {
            files_.push(name);
        }
    }
    return files_;
}

console.log(getFiles('path/to/dir'))

4
なんでif (typeof files_ === 'undefined') files_=[];var files_ = files_ || [];代わりに行う必要があるだけですfiles_ = files_ || [];
jkutianski 14

4
var fs = require('fs');の最初に追加するのを忘れましたgetFiles
GFoley83 2015

これは再帰的な方法です。非常に深いフォルダー構造はサポートされていないため、スタックオーバーフローが発生します。
Mathias Lykkegaard Lorenzen

63

ネイティブfspathモジュールのみを使用した簡単なソリューションを次に示します。

// sync version
function walkSync(currentDirPath, callback) {
    var fs = require('fs'),
        path = require('path');
    fs.readdirSync(currentDirPath).forEach(function (name) {
        var filePath = path.join(currentDirPath, name);
        var stat = fs.statSync(filePath);
        if (stat.isFile()) {
            callback(filePath, stat);
        } else if (stat.isDirectory()) {
            walkSync(filePath, callback);
        }
    });
}

または非同期バージョン(fs.readdir代わりに使用):

// async version with basic error handling
function walk(currentDirPath, callback) {
    var fs = require('fs'),
        path = require('path');
    fs.readdir(currentDirPath, function (err, files) {
        if (err) {
            throw new Error(err);
        }
        files.forEach(function (name) {
            var filePath = path.join(currentDirPath, name);
            var stat = fs.statSync(filePath);
            if (stat.isFile()) {
                callback(filePath, stat);
            } else if (stat.isDirectory()) {
                walk(filePath, callback);
            }
        });
    });
}

次に呼び出すだけです(同期バージョンの場合)。

walkSync('path/to/root/dir', function(filePath, stat) {
    // do something with "filePath"...
});

または非同期バージョン:

walk('path/to/root/dir', function(filePath, stat) {
    // do something with "filePath"...
});

違いは、IOの実行中にノードがブロックする方法にあります。上記のAPIが同じ場合、非同期バージョンを使用して最大のパフォーマンスを確保できます。

ただし、同期バージョンを使用することには1つの利点があります。ウォーク後の次のステートメントのように、ウォークが完了するとすぐにコードを実行する方が簡単です。非同期バージョンでは、完了したことを知るための追加の方法が必要になります。おそらく、最初にすべてのパスのマップを作成し、次にそれらを列挙します。シンプルなビルド/ユーティリティスクリプト(vs高性能Webサーバー)の場合、同期バージョンを使用しても損傷はありません。


1
walkSyncfromからwalk(filePath, callback);to の行を置き換える必要がありますwalkSync(filePath, callback);
MIDE11

3
ただし、非同期バージョンでは引き続きブロックするfs.statSyncを使用しています。代わりにfs.statを使用するべきではありませんか?
MindlessRanger 2016年

これは本当に役に立ち、この方法は再帰的です。ありがとう!
リトルロイ

35

ノードv10.10.0のと、新しい使用することが可能であるwithFileTypesためのオプションをfs.readdirしてfs.readdirSyncとの組み合わせでdirent.isDirectory()、ディレクトリ内のファイル名をフィルタリングする機能。これは次のようになります。

fs.readdirSync('./dirpath', {withFileTypes: true})
.filter(item => !item.isDirectory())
.map(item => item.name)

返される配列は次の形式です。

['file1.txt', 'file2.txt', 'file3.txt']

fs.Direntクラスのドキュメント


7
これまでのところ、これが最良の答えです!
Alex Ivasyuv

2
これは、人々が2020年に探しているものです-「固定」する必要があります
Val Redchenko

1
ベストアンサー2020!
Yves Lange

26

ES7でPromiseを使用する

mz / fsでの非同期使用

このmzモジュールは、有望なバージョンのコアノードライブラリを提供します。それらを使用するのは簡単です。最初にライブラリをインストールします...

npm install mz

その後...

const fs = require('mz/fs');
fs.readdir('./myDir').then(listing => console.log(listing))
  .catch(err => console.error(err));

または、ES7の非同期関数にそれらを書き込むことができます。

async function myReaddir () {
  try {
    const file = await fs.readdir('./myDir/');
  }
  catch (err) { console.error( err ) }
};

再帰的リストの更新

一部のユーザーは、再帰的なリストを表示することを希望しています(ただし、質問には含まれていません)...を使用しfs-promiseます。それは周りの薄いラッパーmzです。

npm install fs-promise;

その後...

const fs = require('fs-promise');
fs.walk('./myDir').then(
    listing => listing.forEach(file => console.log(file.path))
).catch(err => console.error(err));

5
fs.walkは、FSでサポートされていないことと、FS-約束から削除されます(github.com/kevinbeaty/fs-promise/issues/28
アドナン・

20

依存関係。

var fs = require('fs');
var path = require('path');

定義。

// String -> [String]
function fileList(dir) {
  return fs.readdirSync(dir).reduce(function(list, file) {
    var name = path.join(dir, file);
    var isDir = fs.statSync(name).isDirectory();
    return list.concat(isDir ? fileList(name) : [name]);
  }, []);
}

使用法。

var DIR = '/usr/local/bin';

// 1. List all files in DIR
fileList(DIR);
// => ['/usr/local/bin/babel', '/usr/local/bin/bower', ...]

// 2. List all file names in DIR
fileList(DIR).map((file) => file.split(path.sep).slice(-1)[0]);
// => ['babel', 'bower', ...]

fileListあまりにも楽観的すぎることに注意してください。深刻な場合は、エラー処理を追加してください。


1
excludeDirs配列引数も追加しました。それはそれを十分に変えるので、多分あなたは代わりにそれを編集するべきです(もし望むなら)。それ以外の場合は、別の答えで追加します。gist.github.com/AlecTaylor/f3f221b4fb86b4375650
AT

1
@ATニース!自分の回答は便利な拡張機能なので、投稿してください。これを機能なしのままにしておきましょう。
湖南ロストミアン

19

非再帰バージョン

あなたはそれを再帰的にやりたいとは言っていないので、ディレクトリの直接の子だけが必要だと思います。

サンプルコード:

const fs = require('fs');
const path = require('path');

fs.readdirSync('your-directory-path')
  .filter((file) => fs.lstatSync(path.join(folder, file)).isFile());

10

負荷fs

const fs = require('fs');

非同期でファイルを読み取る:

fs.readdir('./dir', function (err, files) {
    // "files" is an Array with files names
});

ファイル同期の読み取り:

var files = fs.readdirSync('./dir');

10

誰かがまだこれを検索している場合、私はこれを行います:

import fs from 'fs';
import path from 'path';

const getAllFiles = dir =>
    fs.readdirSync(dir).reduce((files, file) => {
        const name = path.join(dir, file);
        const isDirectory = fs.statSync(name).isDirectory();
        return isDirectory ? [...files, ...getAllFiles(name)] : [...files, name];
    }, []);

そしてその仕事は私にとって非常に良い


私にとってはうまくいき、再帰的です。インポート構文がまだNodeのフラグの後ろにあることを覚えておいてください。古い方法を使わなければならないかもしれません:const fs = require( 'fs');
mjsarfatti

@ジョシュそれは魅力のように働きます。ただし、[...files, ...getAllFiles(name)]またはの[...files, name]動作を理解するのが少し難しい。少しの説明は非常に役に立ちます:)
Md Mazedul Islam Khan

1
@MdMazedulIslamKhanここで...使用されるものは、スプレッド構文と呼ばれます。基本的には、配列内のすべてのオブジェクトを取得し、それを新しい配列に「展開」します。この場合、files配列内のすべてのエントリが、再帰呼び出しから返されたすべての値とともに戻り値に追加されます。:あなたはここでスプレッドの構文を参照することができdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
T90

8

sortedファイル名を取得します。あなたは、特定に基づいて結果をフィルタリングすることができますextensionなど'.txt''.jpg'など。

import * as fs from 'fs';
import * as Path from 'path';

function getFilenames(path, extension) {
    return fs
        .readdirSync(path)
        .filter(
            item =>
                fs.statSync(Path.join(path, item)).isFile() &&
                (extension === undefined || Path.extname(item) === extension)
        )
        .sort();
}

6

私はあなたの質問から、ディレクトリ名ではなくファイルだけが欲しいと思っています。

例:

animals
├── all.jpg
├── mammals
   └── cat.jpg
   └── dog.jpg
└── insects
    └── bee.jpg

ファイルパスの配列だけが必要な場合は、次を使用しますreturn_object: false

const fs = require('fs').promises;
const path = require('path');

async function walk(dir) {
    let files = await fs.readdir(dir);
    files = await Promise.all(files.map(async file => {
        const filePath = path.join(dir, file);
        const stats = await fs.stat(filePath);
        if (stats.isDirectory()) return walk(filePath);
        else if(stats.isFile()) return filePath;
    }));

    return files.reduce((all, folderContents) => all.concat(folderContents), []);
}

console.log(walk('animals'))

戻り値:

[
  "/animals/all.jpg",
  "/animals/mammals/cat.jpg",
  "/animals/mammals/dog.jpg",
  "/animals/insects/bee.jpg"
];

クレジットはhttps://gist.github.com/lovasoa/8691344#gistcomment-2927279に移動します


5

これは非同期再帰バージョンです。

    function ( path, callback){
     // the callback gets ( err, files) where files is an array of file names
     if( typeof callback !== 'function' ) return
     var
      result = []
      , files = [ path.replace( /\/\s*$/, '' ) ]
     function traverseFiles (){
      if( files.length ) {
       var name = files.shift()
       fs.stat(name, function( err, stats){
        if( err ){
         if( err.errno == 34 ) traverseFiles()
    // in case there's broken symbolic links or a bad path
    // skip file instead of sending error
         else callback(err)
        }
        else if ( stats.isDirectory() ) fs.readdir( name, function( err, files2 ){
         if( err ) callback(err)
         else {
          files = files2
           .map( function( file ){ return name + '/' + file } )
           .concat( files )
          traverseFiles()
         }
        })
        else{
         result.push(name)
         traverseFiles()
        }
       })
      }
      else callback( null, result )
     }
     traverseFiles()
    }

4
ステートメントの最後にセミコロンを追加する癖をつけてください。それ以外の場合は、コードを縮小できません。それにもかかわらず、多くの必要な非同期の貢献に感謝します。
user2867288 2015

2
これは仕様の一部ではありませんが、ランダムな人が好みのリンティングスタイルを「standardjs」と呼んでいます。セミコロンは、特にJavaScriptでコードの明確さを維持するための良い習慣です。それ以外の場合、あなたとあなたのチームはセミコロン自動挿入の規則を覚えておく必要があります。少なくとも私が働いている平均的なJS開発者はそれほど勤勉ではありません。
user2867288

@ user2867288しかし、ASIが存在するため、使用できますか?eslintとprettierを使用して、保存時にコードを定期的にフォーマットし、セミコロンの挿入は問題になりません。
douira

5

@ Hunan-Rostomyanの一般的なアプローチを採用し、それを少し簡潔にし、excludeDirs議論を追加しました。で拡張するのは簡単です。includeDirs同じパターンに従ってください:

import * as fs from 'fs';
import * as path from 'path';

function fileList(dir, excludeDirs?) {
    return fs.readdirSync(dir).reduce(function (list, file) {
        const name = path.join(dir, file);
        if (fs.statSync(name).isDirectory()) {
            if (excludeDirs && excludeDirs.length) {
                excludeDirs = excludeDirs.map(d => path.normalize(d));
                const idx = name.indexOf(path.sep);
                const directory = name.slice(0, idx === -1 ? name.length : idx);
                if (excludeDirs.indexOf(directory) !== -1)
                    return list;
            }
            return list.concat(fileList(name, excludeDirs));
        }
        return list.concat([name]);
    }, []);
}

使用例:

console.log(fileList('.', ['node_modules', 'typings', 'bower_components']));

私はメインフォルダーを持っています:scss、そしてその中に他のフォルダー:テーマがありますが、最終的なリストには、ディレクトリを除外しないディレクトリだけでなく、すべてのディレクトリが表示されます。
SalahAdDin

「。」でのみ正常に機能します フォルダディレクトリ、残りのディレクトリは機能しません。
SalahAdDin

5

箱から出して

すぐに使用できるディレクトリ構造のオブジェクトが必要な場合は、ディレクトリツリーを確認することを強くお勧めします

あなたがこの構造を持っているとしましょう:

photos
   june
   └── windsurf.jpg
└── january
    ├── ski.png
    └── snowboard.jpg
const dirTree = require("directory-tree");
const tree = dirTree("/path/to/photos");

戻ります:

{
  path: "photos",
  name: "photos",
  size: 600,
  type: "directory",
  children: [
    {
      path: "photos/june",
      name: "june",
      size: 400,
      type: "directory",
      children: [
        {
          path: "photos/june/windsurf.jpg",
          name: "windsurf.jpg",
          size: 400,
          type: "file",
          extension: ".jpg"
        }
      ]
    },
    {
      path: "photos/january",
      name: "january",
      size: 200,
      type: "directory",
      children: [
        {
          path: "photos/january/ski.png",
          name: "ski.png",
          size: 100,
          type: "file",
          extension: ".png"
        },
        {
          path: "photos/january/snowboard.jpg",
          name: "snowboard.jpg",
          size: 100,
          type: "file",
          extension: ".jpg"
        }
      ]
    }
  ]
}

カスタムオブジェクト

それ以外の場合、カスタム設定でディレクトリツリーオブジェクトを作成する場合は、次のスニペットをご覧ください。このcodesandboxに実際の例が表示されます。

// my-script.js
const fs = require("fs");
const path = require("path");

const isDirectory = filePath => fs.statSync(filePath).isDirectory();
const isFile = filePath => fs.statSync(filePath).isFile();

const getDirectoryDetails = filePath => {
  const dirs = fs.readdirSync(filePath);
  return {
    dirs: dirs.filter(name => isDirectory(path.join(filePath, name))),
    files: dirs.filter(name => isFile(path.join(filePath, name)))
  };
};

const getFilesRecursively = (parentPath, currentFolder) => {
  const currentFolderPath = path.join(parentPath, currentFolder);
  let currentDirectoryDetails = getDirectoryDetails(currentFolderPath);

  const final = {
    current_dir: currentFolder,
    dirs: currentDirectoryDetails.dirs.map(dir =>
      getFilesRecursively(currentFolderPath, dir)
    ),
    files: currentDirectoryDetails.files
  };

  return final;
};

const getAllFiles = relativePath => {
  const fullPath = path.join(__dirname, relativePath);
  const parentDirectoryPath = path.dirname(fullPath);
  const leafDirectory = path.basename(fullPath);

  const allFiles = getFilesRecursively(parentDirectoryPath, leafDirectory);
  return allFiles;
};

module.exports = { getAllFiles };

次に、単に行うことができます:

// another-file.js 

const { getAllFiles } = require("path/to/my-script");

const allFiles = getAllFiles("/path/to/my-directory");

3

これはTypeScriptであり、オプションで再帰的で、オプションでエラーロギングおよび非同期ソリューションです。検索するファイル名の正規表現を指定できます。

私が使ったのfs-extraは、その上で簡単にスーパーセットを改善できるからfsです。

import * as FsExtra from 'fs-extra'

/**
 * Finds files in the folder that match filePattern, optionally passing back errors .
 * If folderDepth isn't specified, only the first level is searched. Otherwise anything up
 * to Infinity is supported.
 *
 * @static
 * @param {string} folder The folder to start in.
 * @param {string} [filePattern='.*'] A regular expression of the files you want to find.
 * @param {(Error[] | undefined)} [errors=undefined]
 * @param {number} [folderDepth=0]
 * @returns {Promise<string[]>}
 * @memberof FileHelper
 */
public static async findFiles(
    folder: string,
    filePattern: string = '.*',
    errors: Error[] | undefined = undefined,
    folderDepth: number = 0
): Promise<string[]> {
    const results: string[] = []

    // Get all files from the folder
    let items = await FsExtra.readdir(folder).catch(error => {
        if (errors) {
            errors.push(error) // Save errors if we wish (e.g. folder perms issues)
        }

        return results
    })

    // Go through to the required depth and no further
    folderDepth = folderDepth - 1

    // Loop through the results, possibly recurse
    for (const item of items) {
        try {
            const fullPath = Path.join(folder, item)

            if (
                FsExtra.statSync(fullPath).isDirectory() &&
                folderDepth > -1)
            ) {
                // Its a folder, recursively get the child folders' files
                results.push(
                    ...(await FileHelper.findFiles(fullPath, filePattern, errors, folderDepth))
                )
            } else {
                // Filter by the file name pattern, if there is one
                if (filePattern === '.*' || item.search(new RegExp(filePattern, 'i')) > -1) {
                    results.push(fullPath)
                }
            }
        } catch (error) {
            if (errors) {
                errors.push(error) // Save errors if we wish
            }
        }
    }

    return results
}

1

これは動作し、同じディレクトリに存在するtest.txtファイルに結果を保存します

  fs.readdirSync(__dirname).forEach(file => {
    fs.appendFileSync("test.txt", file+"\n", function(err){
    })
})

1

私は最近、このためのツールを作成しました。これは、ディレクトリを非同期でフェッチし、アイテムのリストを返します。ディレクトリ、ファイル、またはその両方を取得でき、フォルダが最初です。フォルダ全体を取得したくない場合は、データにページ番号を付けることもできます。

https://www.npmjs.com/package/fs-browser

これはリンクです。誰かに役立つことを願っています!


0

ただの注意点:ディレクトリ内の各ファイルに対して操作を実行する場合は、vinyl-fsを試してください(これは、ストリーミングビルドシステムであるgulpによって使用されます)。


0

このタスクを自動化するノードモジュールを作成しました:mddir

使用法

ノードmddir "../relative/path/"

インストールするには:npm install mddir -g

現在のディレクトリのマークダウンを生成するには:mddir

絶対パスを生成するには:mddir / absolute / path

相対パスを生成するには:mddir〜/ Documents / whatever。

mdファイルが作業ディレクトリに生成されます。

現在、node_modules、および.gitフォルダーは無視されます。

トラブルシューティング

エラー「node \ r:No such file or directory」が表示される場合、問題は、オペレーティングシステムが異なる行末を使用しており、行末スタイルを明示的にUnixに設定しないと、mddirがそれらを解析できないことです。これは通常Windowsに影響しますが、一部のバージョンのLinuxにも影響します。行末をUnixスタイルに設定するには、mddir npmグローバルbinフォルダー内で実行する必要があります。

行末修正

npm binフォルダーのパスを取得します。

npm config get prefix

そのフォルダーにCd

醸造インストールdos2unix

dos2unix lib / node_modules / mddir / src / mddir.js

これは行末をDosではなくUnixに変換します

次に、通常どおりノードmddir "../relative/path/"を実行します。

生成されたマークダウンファイル構造の例 'directoryList.md'

    |-- .bowerrc
    |-- .jshintrc
    |-- .jshintrc2
    |-- Gruntfile.js
    |-- README.md
    |-- bower.json
    |-- karma.conf.js
    |-- package.json
    |-- app
        |-- app.js
        |-- db.js
        |-- directoryList.md
        |-- index.html
        |-- mddir.js
        |-- routing.js
        |-- server.js
        |-- _api
            |-- api.groups.js
            |-- api.posts.js
            |-- api.users.js
            |-- api.widgets.js
        |-- _components
            |-- directives
                |-- directives.module.js
                |-- vendor
                    |-- directive.draganddrop.js
            |-- helpers
                |-- helpers.module.js
                |-- proprietary
                    |-- factory.actionDispatcher.js
            |-- services
                |-- services.cardTemplates.js
                |-- services.cards.js
                |-- services.groups.js
                |-- services.posts.js
                |-- services.users.js
                |-- services.widgets.js
        |-- _mocks
            |-- mocks.groups.js
            |-- mocks.posts.js
            |-- mocks.users.js
            |-- mocks.widgets.js

0

npm list-contentsモジュールを使用します。指定されたディレクトリのコンテンツとサブコンテンツを読み取り、ファイルとフォルダのパスのリストを返します。

const list = require('list-contents');

list("./dist",(o)=>{
  if(o.error) throw o.error;
   console.log('Folders: ', o.dirs);
   console.log('Files: ', o.files);
});

-1
function getFilesRecursiveSync(dir, fileList, optionalFilterFunction) {
    if (!fileList) {
        grunt.log.error("Variable 'fileList' is undefined or NULL.");
        return;
    }
    var files = fs.readdirSync(dir);
    for (var i in files) {
        if (!files.hasOwnProperty(i)) continue;
        var name = dir + '/' + files[i];
        if (fs.statSync(name).isDirectory()) {
            getFilesRecursiveSync(name, fileList, optionalFilterFunction);
        } else {
            if (optionalFilterFunction && optionalFilterFunction(name) !== true)
                continue;
            fileList.push(name);
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.