Цикл по файловой системе
Здравствуйте. Есть каталог и вложенные в него каталоги, которые содержат фотографии, мне необходимо перебрать все файлы в этих каталогах, обработать фотографии и положить в другой каталог, но при этом сохранить структуру. Если каталог один и в нем файлы то это просто сделать:
var fs = require('fs')
, gm = require('gm');
var data = fs.readdirSync('img');
data.map(function(item, i, arr) {
gm('img/' + item)
.write('opt/' + item, function (err) {
if (err) console.log(err);
});
});
Подскажите, как пройтись в цикле так, что бы перебрать и вложенные каталоги, при этом и сохранить эту иерархию |
придется делать рекурсивный обход дерева каталогов. Т.е. получили список, проходим по нему, берем fs.statSync, проверяем, что если каталог, то его тоже надо обходить, иначе это файл и работаем с ним как с файлом.
для ускорения можно считать, что если очердное имя заканчивается на ".png" или другое расширение файла-картинки, то это скорее всего файл и statSync делать не надо, сразу обрабатываем. если это дело по замыслу должно работать на сервере, то лучше юзать асинхронные варианты функций |
Чет типа того.
let fs = require('fs'),
path = require('path')
function read(root) {
let files = fs.readdirSync(root)
for(let i = 0; i < files.length; i ++) {
let name = [root, files[i]].join('/')
name = path.normalize(name)
console.log(name)
let stat = fs.statSync(name)
if (stat.isDirectory()) {
read(name)
}
}
}
read(__dirname)
|
| Часовой пояс GMT +3, время: 04:26. |