Node.jsのディレクトリを削除せずにディレクトリからすべてのファイルを削除する方法


101

Node.jsを使用してディレクトリ自体を削除せずに、ディレクトリからすべてのファイルを削除するにはどうすればよいですか?
一時ファイルを削除したい。私はまだファイルシステムが苦手です。

私はこの方法を見つけました。これはファイルとディレクトリを削除します。その中で、のようなもの/path/to/directory/*は機能しません。

どのコマンドを使うべきか本当にわかりません。助けてくれてありがとう。


2
ワイルドカードを使用する場合は、npmjs.org / package / globを確認してください
Felix Kling 2014年

1
APIを検索するだけですが、何がそんなに難しいのでしょうか。ディレクトリ内のファイルを取得してから削除する必要があります。
Sikorski

2
グロブは仕事をしました、ありがとう!
youbetternot 2014年

回答:


161

ディレクトリからすべてのファイルを削除するには、最初にを使用してディレクトリ内のすべてのファイルを一覧表示する必要があります。fs.readdir次に、を使用fs.unlinkして各ファイルを削除できます。またfs.readdir、ファイル名だけが表示されます。フルパスを取得するには、ディレクトリ名と連結する必要があります。

これが例です

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

const directory = 'test';

fs.readdir(directory, (err, files) => {
  if (err) throw err;

  for (const file of files) {
    fs.unlink(path.join(directory, file), err => {
      if (err) throw err;
    });
  }
});

ノードバージョン14を更新します

すべてのファイルを再帰的に削除するためにrecursive使用できるフラグがありrmdirます。詳細については、nodejsのドキュメントを参照してください。

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

const directory = 'test';

fs.rmdir(directory, { recursive: true })
  .then(() => console.log('directory removed!'));

4
これはうまく機能し、ほとんどの場合、すでにfsとパスが必要なので、追加のパッケージは必要ありません。'test'をpath.join(__ dirname、 '.. / .. / public / uploads')に交換しました
russiansummer

3
2pを追加するには、スニペットは優れています。覚えておくべきことの1つは、スニペットが非同期であり、スクリプト/自動化の場合は、同期バージョンのを使用することfs.readdirSyncです。すべてのファイルを割り当てるだけです:const files = fs.readdirSync(directory);そして同じようにループしますfor (const file of files) {
1

どのようにフォルダ除外する「.git」『テスト』ディレクトリを?
5ervant

forループにifステートメントを追加してそのケースを削除することもできますが、ファイルとフォルダーを再帰的に削除する場合は、npmパッケージを使用することをお勧めします。npmjs.com/package/fs-extra
Rodrigo5244

45

はい、モジュールfs-extraがあります。.emptyDir()このモジュール内には、ジョブを実行するメソッドがあります。次に例を示します。

const fsExtra = require('fs-extra')

fsExtra.emptyDirSync(fileDir)

このモジュールの非同期バージョンもあります。誰でもリンクをチェックできます。


3
非常に便利なモジュールです。ぜひお試しください。きっと気に入る機能がたくさんあります。
GTS

1
はい、なぜ些細なことではない何かを実装するのですか。
manuman94

1
ちょっとした警告ですが、この方法ではemptyDir、ディレクトリが存在しない場合に関数がディレクトリを作成するため、質問の目的の動作とは少し異なります。
ProgrammerRaj

35

とても便利なrimrafというパッケージがあります。これは、ノード用のUNIXコマンドrm-rfです。

それでも、フォルダを非常に簡単に削除できるため、強力すぎる可能性があります。次のコマンドは、フォルダ内のファイルを削除します。*を削除すると、ログフォルダが削除されます。

const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });

https://www.npmjs.com/package/rimraf


関数で解決できるIMOは、パッケージで解決してはいけません。
Aditya Anand

1
@ AdityaAnand-どの関数ですか?パッケージをインポートするか、自分で
大量の

12

非同期を使用してノード8+で待機する場合は、@ Waterscrollの応答に基づいて構築します。

const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const unlink = util.promisify(fs.unlink);
const directory = 'test';

async function toRun() {
  try {
    const files = await readdir(directory);
    const unlinkPromises = files.map(filename => unlink(`${directory}/${filename}`));
    return Promise.all(unlinkPromises);
  } catch(err) {
    console.log(err);
  }
}

toRun();

1
すごい!フォルダ内の特定のファイルを保持したいので、探していたもの:D
Silve2611 2018年

1
return await Promise冗長なメモです。あなたはただすることができますreturn PromisetoRunこの関数は非同期なので、約束が返されたとき、アプリがその上で待つことができます。
ItalyPaleAle

これでconst { promises: fs } = require('fs');、ノード10+から使用できると思います。
四鏡

0

🚀グラフ-fs


インストール

npm i graph-fs

使用する

const {Node} = require("graph-fs");
const directory = new Node("/path/to/directory");

directory.clear(); // <--
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.