2017-01-04 4 views
5

내 기능에 약간 문제가있다. 나는 많은 디렉토리에있는 모든 파일을 얻고 싶다. 현재 매개 변수로 전달 된 파일에서 파일을 검색 할 수 있습니다. 매개 변수로 전달 된 폴더에서 각 폴더의 html 파일을 검색하고 싶습니다. "test"에있는 파일을 검색하지만 "test/1/* .Html", "test/2/./.html"을 검색하고 싶다면 "test"매개 변수를 입력하면 설명 할 것입니다 :디렉토리의 모든 파일을 반복적으로 가져 오기 NodejS

var srcpath2 = path.join('.', 'diapo', result); 
function getDirectories(srcpath2) { 
       return fs.readdirSync(srcpath2).filter(function (file) { 
        return fs.statSync(path.join(srcpath2, file)).isDirectory(); 
       }); 
      } 

그 결과 [1,2,3]

감사합니다

답변

12

glob npm package처럼 보일 것입니다.

파일 계층 구조 :

test 
├── one.html 
└── test-nested 
    └── two.html 

JS 코드 :

var getDirectories = function (src, callback) { 
    glob(src + '/**/*', callback); 
}; 
getDirectories('test', function (err, res) { 
    if (err) { 
    console.log('Error', err); 
    } else { 
    console.log(res); 
    } 
}); 

표시 : 당신은 또한 자신을 작성할 수 있습니다

[ 'test/one.html', 
    'test/test-nested', 
    'test/test-nested/two.html' ] 
+0

super! 그것은 완벽 ! 고맙습니다 ! :) nom glob 그것은 매우 좋다 –

0

여기를 사용하는 방법의 예입니다 다음과 같이 디렉토리를 탐색하려면 아래 코드를 입력하십시오 :

var fs = require('fs'); 
function traverseDirectory(dirname, callback) { 
    var directory = []; 
    fs.readdir(dirname, function(err, list) { 
    dirname = fs.realpathSync(dirname); 
    if (err) { 
     return callback(err); 
    } 
    var listlength = list.length; 
    list.forEach(function(file) { 
     file = dirname + '\\' + file; 
     fs.stat(file, function(err, stat) { 
     directory.push(file); 
if (stat && stat.isDirectory()) { 
      traverseDirectory(file, function(err, parsed) { 
    directory = directory.concat(parsed); 
    if (!--listlength) { 
     callback(null, directory); 
    } 
    }); 
} else { 
    if (!--listlength) { 
     callback(null, directory); 
    } 
      } 
     }); 
    }); 
    }); 
} 
traverseDirectory(__dirname, function(err, result) { 
    if (err) { 
    console.log(err); 
    } 
    console.log(result); 
}); 
당신은 여기에 대한 자세한 정보를 확인할 수 있습니다

: 타이프 라이터를 사용하여, 주어진 기본 폴더의 모든 하위 폴더를 얻고,이 함께했다 : http://www.codingdefined.com/2014/09/how-to-navigate-through-directories-in.html

+0

감사합니다! res.send에서 결과를 보내는 방법은 무엇입니까? 제발 –

+0

@ coco62 일단 함수 내에서 결과를 얻으면, 로깅하는 대신 결과를 전달할 수 있습니다. – CodingDefined

+0

고마워요! 좋은거야. –

2

내가 전자 응용 프로그램에서 유사한 그래서 뭔가에 필요한

import { readdirSync, statSync, existsSync } from "fs"; 
import * as path from "path"; 

// recursive synchronous "walk" through a folder structure, with the given base path 
getAllSubFolders = (baseFolder, folderList = []) => { 

    let folders:string[] = readdirSync(baseFolder).filter(file => statSync(path.join(baseFolder, file)).isDirectory()); 
    folders.forEach(folder => { 
     folderList.push(path.join(baseFolder,folder)); 
     this.getAllSubFolders(path.join(baseFolder,folder), folderList); 
    }); 
} 
0

여기 있습니다. 좋은 답변과 마찬가지로 이해하기 어렵습니다.

const isDirectory = path => statSync(path).isDirectory(); 
const getDirectories = path => 
    readdirSync(path).map(name => join(path, name)).filter(isDirectory); 

const isFile = path => statSync(path).isFile(); 
const getFiles = path => 
    readdirSync(path).map(name => join(path, name)).filter(isFile); 

const getFilesRecursively = (path) => { 
    let dirs = getDirectories(path); 
    let files = dirs 
     .map(dir => getFilesRecursively(dir)) // go through each directory 
     .reduce((a,b) => a.concat(b), []); // map returns a 2d array (array of file arrays) so flatten 
    return files.concat(getFiles(path)); 
}; 
관련 문제