Цикл по файловой системе
Здравствуйте. Есть каталог и вложенные в него каталоги, которые содержат фотографии, мне необходимо перебрать все файлы в этих каталогах, обработать фотографии и положить в другой каталог, но при этом сохранить структуру. Если каталог один и в нем файлы то это просто сделать:
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, время: 13:10. |