¿Cómo obtener el tamaño total de los archivos en el directorio? Mejor manera ?¿Cómo obtener el tamaño total de los archivos en el directorio?
Respuesta
Aquí hay una solución simple que utiliza las bibliotecas centrales Nodejs fs combinadas con la biblioteca asíncrona. Es completamente asincrónico y debería funcionar igual que el comando 'du'.
var fs = require('fs'),
path = require('path'),
async = require('async');
function readSizeRecursive(item, cb) {
fs.lstat(item, function(err, stats) {
if (!err && stats.isDirectory()) {
var total = stats.size;
fs.readdir(item, function(err, list) {
if (err) return cb(err);
async.forEach(
list,
function(diritem, callback) {
readSizeRecursive(path.join(item, diritem), function(err, size) {
total += size;
callback(err);
});
},
function(err) {
cb(err, total);
}
);
});
}
else {
cb(err);
}
});
}
Revise node.js File System functions. Parece que puede usar una combinación de fs.readdir(path, [cb])
y fs.stat(file, [cb])
para enumerar los archivos en un directorio y sumar sus tamaños.
Algo como esto (totalmente no probado):
var fs = require('fs');
fs.readdir('/path/to/dir', function(err, files) {
var i, totalSizeBytes=0;
if (err) throw err;
for (i=0; i<files.length; i++) {
fs.stat(files[i], function(err, stats) {
if (err) { throw err; }
if (stats.isFile()) { totalSizeBytes += stats.size; }
});
}
});
// Figure out how to wait for all callbacks to complete
// e.g. by using a countdown latch, and yield total size
// via a callback.
Tenga en cuenta que esta solución sólo tiene en cuenta los ficheros de texto almacenados directamente en el directorio de destino y realiza ninguna recursividad. Una solución recursiva vendría naturalmente al marcar stats.isDirectory()
y entrar, aunque es probable que complique el paso "esperar la finalización".
Esta solución necesita la ruta relativa incluido en la llamada fs.stat o te ENOENT errores. – citizenslave
'Averiguar cómo esperar a que se completen todas las devoluciones de llamada' de la manera más simple es usar una biblioteca basada en Promesa y usar' Promise.all() ' – samvv
He probado el siguiente código y funciona perfectamente bien. Háganme saber si hay algo que no entienda.
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);
});
// --- Everything below is optional ---
size.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
size.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
segundo método:
Es posible que desee hacer referencia a la API Node.js para child_process
El sistema operativo Windows es una cosa ... – iOnline247
Uso du: https://www.npmjs.org/package/du
require('du')('/home/rvagg/.npm/', function (err, size) {
console.log('The size of /home/rvagg/.npm/ is:', size, 'bytes')
})
ES6 variante:
import path_module from 'path'
import fs from 'fs'
// computes a size of a filesystem folder (or a file)
export function fs_size(path, callback)
{
fs.lstat(path, function(error, stats)
{
if (error)
{
return callback(error)
}
if (!stats.isDirectory())
{
return callback(undefined, stats.size)
}
let total = stats.size
fs.readdir(path, function(error, names)
{
if (error)
{
return callback(error)
}
let left = names.length
if (left === 0)
{
return callback(undefined, total)
}
function done(size)
{
total += size
left--
if (left === 0)
{
callback(undefined, total)
}
}
for (let name of names)
{
fs_size(path_module.join(path, name), function(error, size)
{
if (error)
{
return callback(error)
}
done(size)
})
}
})
})
}
- 1. Script de PowerShell para obtener un tamaño total de directorio
- 2. tamaño total de los contenidos de todos los archivos en un directorio
- 3. IOS - Obtener suma de tamaño de archivo en el directorio
- 4. ¿Cómo obtener el tamaño de RAM total de un dispositivo?
- 5. Determinar el tamaño total del directorio/troncal SVN
- 6. Verificar el tamaño total del archivo de un directorio específico para un usuario específico
- 7. Obtener recursivamente el tamaño de un directorio
- 8. Obtener el tamaño total de las carpetas con find & du
- 9. ¿Cómo obtengo un tamaño de directorio (archivos en el directorio) en C#?
- 10. C Función que calcula el tamaño total de los argumentos
- 11. Copie todos los archivos en el directorio
- 12. Python: ¿Cómo obtener archivos en un archivo sin el directorio?
- 13. ¿Cómo obtener el número total de iteraciones en un foreach
- 14. Cómo determinar el tamaño total de la caché ASP.Net?
- 15. Cómo obtener archivos en las subcarpetas también desde el directorio
- 16. ¿Cómo recupero el tamaño de un directorio de Perforce?
- 17. ¿Cómo mido el tamaño total de mis variables globales?
- 18. Obtener el recuento de archivos en un directorio
- 19. Total de archivos de PHP en el directorio Y función de subdirectorio
- 20. ¿Cómo establecer el control total en un directorio?
- 21. Cómo obtener archivos en un directorio, incluidos todos los subdirectorios
- 22. lista de PHP todos los archivos en el directorio
- 23. Cómo establecer el control total de un directorio
- 24. ¿Cómo obtener todos los archivos en un directorio?
- 25. Limitar el tamaño del directorio de caché
- 26. eliminar todos los archivos de tamaño cero en el directorio especificado
- 27. Obtener el número total de elementos en el conjunto
- 28. Cómo obtener el número total de resultados posibles en Lucene
- 29. Archivos en el directorio en C++
- 30. cómo obtener todos los archivos en un directorio en ipad usando el objetivo c
' path.join (elemento, diritem) '¿es correcto? Cuando lance la función, devuelve 'TypeError: no se puede llamar al método 'join' of undefined' – inetbug
¿Cargó el módulo' path'? – loganfsmyth
No. Creo que es mejor mostrar claramente la carga de todos los módulos necesarios en el código. – inetbug