Jak uzyskać sumę plików w katalogu? Najlepszym sposobem ?Jak uzyskać sumę plików w katalogu?
Odpowiedz
Oto proste rozwiązanie z użyciem podstawowych bibliotek Nodejs fs w połączeniu z biblioteką asynchroniczną. Jest w pełni asynchroniczny i powinien działać tak, jak polecenie "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);
}
});
}
Przejrzyj plik node.js File System functions. Wygląda na to, że możesz użyć kombinacji fs.readdir(path, [cb])
i fs.stat(file, [cb])
, aby wyświetlić listę plików w katalogu i zsumować ich rozmiary.
Coś jak ten (całkowicie niesprawdzone):
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.
Należy zauważyć, że rozwiązanie to uwzględnia jedynie zwykłe pliki zapisane bezpośrednio w folderze docelowym i nie wykonuje żadnej rekursji. Rekursywne rozwiązanie przychodzi naturalnie, sprawdzając stats.isDirectory()
i wprowadzając, chociaż prawdopodobnie komplikuje krok "Oczekiwanie na zakończenie".
To rozwiązanie wymaga ścieżkę względną zawarte w zaproszeniu fs.stat lub dostaniesz błędy ENOENT. – citizenslave
'Sprawdź, jak poczekać na zakończenie wszystkich wywołań zwrotnych" Najprostszym sposobem jest użycie biblioteki opartej na obietnicy i użycie 'Promise.all()' – samvv
Przetestowałem poniższy kod i działa idealnie dobrze. Proszę dać mi znać, jeśli jest coś, czego nie rozumiesz.
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-ty metoda:
Może chcesz przekazać API node.js dla child_process
Windows OS to rzecz ... – iOnline247
Zastosowanie 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 wariant:
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. iOS - Get sumę rozmiar pliku w katalogu
- 2. Jak uzyskać skumulowaną sumę
- 3. Jak uzyskać sumę tablicę ciągów w ruby
- 4. jak uzyskać liczbę plików w katalogu używając ruby
- 5. Jak uzyskać wszystkie ścieżki do plików w katalogu Dokumenty?
- 6. Jak uzyskać tylko nazwy plików w katalogu przy użyciu C#?
- 7. Jak uzyskać listę wszystkich plików z rozszerzeniem ESY w katalogu?
- 8. Jak odczytywać atrybuty plików w katalogu?
- 9. Jak uzyskać listing katalogu w C?
- 10. Jak uzyskać całkowitą sumę NSNumber z NSArray?
- 11. Regex dla plików w katalogu
- 12. Jak uzyskać NSArray nazwy plików wszystkich plików w danym katalogu w mojej aplikacji?
- 13. Jak uzyskać rozmiar katalogu (pliki w katalogu) w języku C#?
- 14. Jak wyświetlić listę plików w katalogu android?
- 15. Jak wyświetlić listę plików w katalogu statycznym?
- 16. Jak zmienić rozszerzenie wielu plików w katalogu?
- 17. Lista tylko plików w katalogu?
- 18. Jak uzyskać łączną sumę według grupy w R?
- 19. Jak uzyskać sumę dziedzinie czasu w serwerze SQL 2008
- 20. Jak mogę uzyskać sumę tablic krotek w Scala
- 21. Jak uzyskać sumaryczną sumę numpy array w miejscu
- 22. Znajdź liczbę plików w katalogu
- 23. Określanie liczby plików w katalogu
- 24. ładowanie nowych plików w katalogu
- 25. Zmiana nazwy plików na sumę md5 + rozszerzenie (BASH)
- 26. Jak uzyskać pliki w katalogu, w tym wszystkie podkatalogi
- 27. Przenoszenie plików do katalogu
- 28. SQLite: Uzyskaj sumę/sumę kolumn
- 29. Jak uzyskać nazwę bieżącego katalogu w Ruby?
- 30. Jak uzyskać listę katalogów w katalogu NSDocumentDirectory?
'path.join (pozycja, diritem) 'jest poprawny? Po uruchomieniu funkcji zwraca 'TypeError: Can not call method 'join' of undefined' – inetbug
Czy załadowałeś moduł' path'? – loganfsmyth
Nie. Myślę, że lepiej jest wyraźnie pokazać ładowanie wszystkich niezbędnych modułów w kodzie. – inetbug