Node.jsを使用してディレクトリ自体を削除せずに、ディレクトリからすべてのファイルを削除するにはどうすればよいですか?
一時ファイルを削除したい。私はまだファイルシステムが苦手です。
私はこの方法を見つけました。これはファイルとディレクトリを削除します。その中で、のようなもの/path/to/directory/*は機能しません。
どのコマンドを使うべきか本当にわかりません。助けてくれてありがとう。
回答:
ディレクトリからすべてのファイルを削除するには、最初にを使用してディレクトリ内のすべてのファイルを一覧表示する必要があります。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;
});
}
});
すべてのファイルを再帰的に削除するためにrecursive使用できるフラグがありrmdirます。詳細については、nodejsのドキュメントを参照してください。
const fs = require('fs').promises;
const directory = 'test';
fs.rmdir(directory, { recursive: true })
.then(() => console.log('directory removed!'));
fs.readdirSyncです。すべてのファイルを割り当てるだけです:const files = fs.readdirSync(directory);そして同じようにループしますfor (const file of files) {。
はい、モジュールfs-extraがあります。.emptyDir()このモジュール内には、ジョブを実行するメソッドがあります。次に例を示します。
const fsExtra = require('fs-extra')
fsExtra.emptyDirSync(fileDir)
このモジュールの非同期バージョンもあります。誰でもリンクをチェックできます。
emptyDir、ディレクトリが存在しない場合に関数がディレクトリを作成するため、質問の目的の動作とは少し異なります。
とても便利なrimrafというパッケージがあります。これは、ノード用のUNIXコマンドrm-rfです。
それでも、フォルダを非常に簡単に削除できるため、強力すぎる可能性があります。次のコマンドは、フォルダ内のファイルを削除します。*を削除すると、ログフォルダが削除されます。
const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });
非同期を使用してノード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();
return await Promise冗長なメモです。あなたはただすることができますreturn Promise。toRunこの関数は非同期なので、約束が返されたとき、アプリがその上で待つことができます。
const { promises: fs } = require('fs');、ノード10+から使用できると思います。