Come ottenere totalsize di file nella directory? Miglior modo ?Come ottenere totalsize di file nella directory?
risposta
Ecco una soluzione semplice che utilizza le librerie fs core Nodejs combinate con la libreria asincrona. È completamente asincrono e dovrebbe funzionare proprio come il 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);
}
});
}
Rivedere il nodo.js File System functions. Sembra che sia possibile utilizzare una combinazione di fs.readdir(path, [cb])
e fs.stat(file, [cb])
per elencare i file in una directory e sommarne le dimensioni.
Qualcosa di simile (totalmente non testata):
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.
Si noti che questa soluzione considera solo i file normali memorizzati direttamente nella directory di destinazione ed esegue senza ricorsione. Una soluzione ricorsiva verrebbe naturalmente controllando stats.isDirectory()
e inserendo, anche se probabilmente complicherebbe la fase di "attesa del completamento".
Questa soluzione ha bisogno il percorso relativo incluso nella chiamata fs.stat o avrai errori ENOENT. – citizenslave
'Scopri come attendere il completamento di tutte le callback' il modo più semplice è usare una libreria basata su Promise e usare' Promise.all() ' – samvv
Ho testato il seguente codice e funziona perfettamente. Per favore fatemi sapere se c'è qualcosa che non capite.
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);
});
2 ° metodo:
si potrebbe desiderare di riferimento API per Node.js child_process
Sistema operativo Windows è 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. Ottieni l'ultimo file nella directory
- 2. Come posso ottenere una dimensione di directory (file nella directory) in C#?
- 3. Come elencare i file nella directory corrente?
- 4. carica nuovi file nella directory
- 5. cuoco creare file nella directory home dell'utente
- 6. Come leggere gli attributi del file nella directory?
- 7. Salvare i file SharedPreferences nella directory personalizzata o ottenere la directory SharedPreferences predefinita
- 8. Come cancellare file di log hs_err_pid nella home directory
- 9. Come caricare il file nella directory di destinazione con curl?
- 10. Ottenere un elenco di tutte le sottodirectory nella directory corrente
- 11. Come si legge da un file nella stessa directory?
- 12. Come posso ottenere un NSArray di nomi di file di tutti i file in una determinata directory nella mia app?
- 13. lista PHP tutti i file nella directory
- 14. Copia tutti i file nella directory
- 15. Come ottenere la directory di un file argparse in Python?
- 16. Python: Importa file nella directory nonno
- 17. Come ottenere file in una directory, comprese tutte le sottodirectory
- 18. Come ottenere la directory dei file attualmente eseguita in CasperJS
- 19. Font.createFont lascia i file nella directory temporanea
- 20. Decomprime il file tar nella directory
- 21. Listing solo i file nella directory
- 22. Query per l'elenco di file e cartelle nella directory radice
- 23. iOS - Get somma di dimensione del file nella directory
- 24. Compilare l'ultimo file utilizzato nella directory corrente
- 25. untar nomefile.tr.gz nella directory "nome file"
- 26. Come ottenere i file anche nelle sottocartelle dalla directory
- 27. File AppConfig non trovato nella directory bin
- 28. Come posso ottenere che gulp-typescript venga stampato nella stessa directory del file sorgente?
- 29. Come ottenere tutti i percorsi per i file nella directory Documenti?
- 30. ottenere la directory di file istanziato un rubino di classe
' path.join (item, diritem) 'è corretto? Quando lancio la funzione, restituisce 'TypeError: Can not call method 'join' of undefined' – inetbug
Hai caricato il modulo' path'? – loganfsmyth
No. Penso che sia meglio mostrare chiaramente il caricamento di tutti i moduli necessari nel codice. – inetbug