Javascript 使用du命令获取文件夹的大小
我曾经在我的电子应用程序中使用此代码获取目录的大小Javascript 使用du命令获取文件夹的大小,javascript,node.js,spawn,du,Javascript,Node.js,Spawn,Du,我曾经在我的电子应用程序中使用此代码获取目录的大小 var util = require('util'), spawn = require('child_process').spawn, size = spawn('du', ['-sh', '/path/to/dir']); size.stdout.on('data', function (data) { console.log('size: ' + data); }); 它在我的机器里工作。当我在另一台windows机器上构建并运
var util = require('util'),
spawn = require('child_process').spawn,
size = spawn('du', ['-sh', '/path/to/dir']);
size.stdout.on('data', function (data) {
console.log('size: ' + data);
});
它在我的机器里工作。当我在另一台windows机器上构建并运行时,它抛出的du不会被识别为这样的内部命令
或者,在所有三种平台和所有机器中,是否有任何通用的方法来获取目录的大小。du是一个Linux命令。它通常在Windows中不可用(对不起,不知道Mac) 子进程模块提供生成子进程的能力。看起来您只是在操作系统中执行命令。因此,要使解决方案在多个系统上工作,您可以有两种选择:
- 检查操作系统,并执行(使用spawn)适当的系统命令,就像您现在所做的那样。这使代码保持最简单
- 或者,使用JavaScript代码(StackOverflow中有许多关于如何在node.js中获取目录大小的问题)。我认为这将是覆盖任何操作系统的最安全的方式,而不必担心命令支持
您必须在Windows系统中安装了一些linux工具,但不能指望它们在任何普通Windows中都可用。它通常在Windows中不可用(对不起,不知道Mac) 子进程模块提供生成子进程的能力。看起来您只是在操作系统中执行命令。因此,要使解决方案在多个系统上工作,您可以有两种选择:
- 检查操作系统,并执行(使用spawn)适当的系统命令,就像您现在所做的那样。这使代码保持最简单
- 或者,使用JavaScript代码(StackOverflow中有许多关于如何在node.js中获取目录大小的问题)。我认为这将是覆盖任何操作系统的最安全的方式,而不必担心命令支持
您必须在Windows系统中安装了一些linux工具,但您不能指望这些工具在任何普通Windows中都可用。1。您机器上安装的Windows可能具有该命令。并非所有windows安装中都有此功能。您可能更喜欢使用windirstat.info或类似的本地语言 2.由于du是用于估计文件空间使用情况的UNIX和Linux命令,因此它应该可以在任何类似UNIX的操作系统中工作 3.du命令是一个用于报告文件系统磁盘空间使用情况的命令行实用程序。它可以用来找出文件和文件夹的磁盘使用情况,并显示占用空间的内容。它支持仅显示目录或所有文件、显示总计、以人类可读的格式输出,并且可以与其他UNIX工具组合以输出系统上最大文件夹文件的排序列表。见:
如果需要它在UNIX和非UNIX操作系统上工作,应首先检查程序用户使用的操作系统,然后根据运行该程序的操作系统执行不同的命令。1。计算机中安装的windows可能有该命令。并非所有windows安装中都有此功能。您可能更喜欢使用windirstat.info或类似的本地语言 2.由于du是用于估计文件空间使用情况的UNIX和Linux命令,因此它应该可以在任何类似UNIX的操作系统中工作 3.du命令是一个用于报告文件系统磁盘空间使用情况的命令行实用程序。它可以用来找出文件和文件夹的磁盘使用情况,并显示占用空间的内容。它支持仅显示目录或所有文件、显示总计、以人类可读的格式输出,并且可以与其他UNIX工具组合以输出系统上最大文件夹文件的排序列表。见:
如果需要它在UNIX和非UNIX操作系统上工作,应首先检查程序用户使用的操作系统,然后根据运行它的操作系统执行不同的命令。非常原始且同步的代码。对于产品,必须切换到异步函数
const path = require('path');
const fs = require('fs');
function dirsizeSync(dirname) {
console.log(dirname);
let size = 0;
try {
fs.readdirSync(dirname)
.map(e => path.join(dirname, e))
.map(e => {
try {
return {
dirname: e,
stat: fs.statSync(e)
};
} catch (ex) {
return null;
}
})
.forEach(e => {
if (e) {
if (e.stat.isDirectory()) {
size += dirsizeSync(e.dirname);
} else if (e.stat.isFile()) {
size += e.stat.size;
}
}
});
} catch (ex) {}
return size;
}
console.log(dirsizeSync('/tmp') + ' bytes');
非常原始和同步的代码。对于产品,必须切换到异步函数
const path = require('path');
const fs = require('fs');
function dirsizeSync(dirname) {
console.log(dirname);
let size = 0;
try {
fs.readdirSync(dirname)
.map(e => path.join(dirname, e))
.map(e => {
try {
return {
dirname: e,
stat: fs.statSync(e)
};
} catch (ex) {
return null;
}
})
.forEach(e => {
if (e) {
if (e.stat.isDirectory()) {
size += dirsizeSync(e.dirname);
} else if (e.stat.isFile()) {
size += e.stat.size;
}
}
});
} catch (ex) {}
return size;
}
console.log(dirsizeSync('/tmp') + ' bytes');
您可以使用内置的
node.js
fs
包的stat
命令。。。但是如果你开了一整趟车,这个会在记忆中爆炸吗。最好坚持使用节点之外经过验证的工具
您可以使用内置的
node.js
fs
包的stat
命令。。。但是如果你开了一整趟车,这个会在记忆中爆炸吗。最好坚持使用节点之外经过验证的工具
我知道这个问题有点老了,但最近我发现自己在寻找一个关于如何做的清晰而简短的答案,如果它对某人有用,那么,如果它不仅消耗了几个字节 我必须澄清,我不是任何方面的专家,但我喜欢学习,这就是我在寻找解决方案时学到的:
*/
First declare the needs of a Child Process and [execSync()][1]
"the method will not return until the child process has fully closed"
*/
此脚本是一个同步操作
//Declares the required module
const execSync = require('child_process').execSync;
//Declare the directory or file path
const target = "Absolute path to dir or file";
/*
Declare a variable or constant to store the data returned,
parse data to Number and multiplying by 1024 to get total
bytes
*/
const size = parseInt(execSync(`du '${target}'`)) * 1024;
//Finally return or send to console, the variable or constant used for store data
return size;
使用exec或execSync可以在Unix系统中执行文件或命令,当在终端中执行du'some path'时,获取文件或目录的磁盘利用率,并再次获取绝对pat,因此需要对结果的整数进行解析,execSync将获得一个缓冲区作为结果
我使用模板字符串作为参数,以避免编写更多的代码行,因为您不必处理字符串路径中的空格问题,此方法支持这些空格
//If executed in a terminal
du 'path to file or directory including white spaces in names'
// returns something like
125485 path to file or directory including white spaces in names
我不会说英语,所以我使用翻译作为翻译,我为语言错误道歉
我知道这个任务