Estou tentando obter uma lista dos nomes de todos os arquivos presentes em um diretório usando o Node.js. Eu quero saída que é uma matriz de nomes de arquivos. Como posso fazer isso?
javascript
node.js
directory-listing
ressopoluição
fonte
fonte
fs.readdir
funciona, mas não pode usar padrões glob de nome de arquivo comols /tmp/*core*
. Confira github.com/isaacs/node-glob . Globs podem até procurar em subdiretórios.readdir-recursive
módulo mas se você está procurando os nomes de arquivos em subdiretórios tambémRespostas:
Você pode usar o
fs.readdir
oufs.readdirSync
métodos.fs.readdir
fs.readdirSync
A diferença entre os dois métodos é que o primeiro é assíncrono; portanto, é necessário fornecer uma função de retorno de chamada que será executada quando o processo de leitura terminar.
O segundo é síncrono, ele retornará a matriz do nome do arquivo, mas interromperá qualquer execução adicional do seu código até que o processo de leitura termine.
fonte
readdir
também mostra os nomes dos diretórios . Para filtrá-los, usefs.stat(path, callback(err, stats))
estats.isDirectory()
.ls
? Basta esperar até que alguém cria alguns nomes de arquivos com espaços incorporados e novas linhas ...Na IMO, a maneira mais conveniente de executar essas tarefas é usar uma ferramenta glob . Aqui está um pacote glob para o node.js. Instale com
Em seguida, use o curinga para corresponder aos nomes de arquivos (exemplo extraído do site do pacote)
fonte
cwd
no objeto de opções.glob
fora de si mesmo? Por exemplo. Eu queroconsole.log
os resultados, mas não por dentroglob()
?glob.sync(pattern, [options])
método pode ser mais fácil de usar, pois simplesmente retorna uma matriz de nomes de arquivos, em vez de usar um retorno de chamada. Mais informações aqui: github.com/isaacs/node-globA resposta acima não realiza uma pesquisa recursiva no diretório. Aqui está o que eu fiz para uma pesquisa recursiva (usando nó-pé :
npm install walk
)fonte
.git
Obter arquivos em todos os subdiretórios
fonte
if (typeof files_ === 'undefined') files_=[];
? você só precisa fazer emvar files_ = files_ || [];
vez defiles_ = files_ || [];
.var fs = require('fs');
no início degetFiles
.Aqui está uma solução simples usando apenas o nativo
fs
e ospath
módulos:ou versão assíncrona (usa em
fs.readdir
vez disso):Então você acabou de ligar (para versão de sincronização):
ou versão assíncrona:
A diferença está em como o nó é bloqueado durante a execução do IO. Como a API acima é a mesma, você pode apenas usar a versão assíncrona para garantir o desempenho máximo.
No entanto, há uma vantagem em usar a versão síncrona. É mais fácil executar algum código assim que a caminhada é concluída, como na próxima instrução após a caminhada. Com a versão assíncrona, você precisaria de uma maneira extra de saber quando terminar. Talvez criando um mapa de todos os caminhos primeiro e depois enumerá-los. Para scripts simples de compilação / utilidade (versus servidores Web de alto desempenho), você pode usar a versão de sincronização sem causar nenhum dano.
fonte
walkSync
de awalk(filePath, callback);
parawalkSync(filePath, callback);
No Nó v10.10.0, é possível usar a nova
withFileTypes
opção parafs.readdir
efs.readdirSync
em combinação com adirent.isDirectory()
função para filtrar por nomes de arquivos em um diretório. É assim:A matriz retornada está no formato:
Documentos para a classe fs.Dirent
fonte
Usando promessas com o ES7
Uso assíncrono com mz / fs
O
mz
módulo fornece versões promissificadas da biblioteca de nós principais. Usá-los é simples. Primeiro instale a biblioteca ...Então...
Como alternativa, você pode escrevê-los em funções assíncronas no ES7:
Atualização para listagem recursiva
Alguns dos usuários especificaram o desejo de ver uma listagem recursiva (embora não esteja na pergunta) ... Use
fs-promise
. É um invólucro fino por aímz
.então...
fonte
Dependências.
Definição.
Uso.
Observe que isso
fileList
é otimista demais. Para algo sério, adicione algum tratamento de erro.fonte
excludeDirs
argumento de matriz também. Ele muda o suficiente para que você possa editá-lo (se quiser). Caso contrário, vou adicioná-lo em uma resposta diferente. gist.github.com/AlecTaylor/f3f221b4fb86b4375650versão não recursiva
Você não diz que deseja fazê-lo recursivamente, portanto, presumo que você só precise de filhos diretos do diretório.
Código de amostra:
fonte
Carregar
fs
:Leia arquivos assíncronos :
Sincronização de arquivos de leitura :
fonte
se alguém ainda procurar por isso, eu faço o seguinte:
e seu trabalho é muito bom para mim
fonte
[...files, ...getAllFiles(name)]
ou[...files, name]
funciona. Um pouco de explicação seria muito útil :)...
usado aqui é chamado de sintaxe de propagação. O que basicamente faz é pegar todos os objetos dentro da matriz e 'espalhá-la' na nova matriz. Nesse caso, todas as entradas dentro dafiles
matriz são adicionadas ao retorno, juntamente com todos os valores retornados da chamada recursiva. Você pode consultar a sintaxe de propagação aqui: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Obtenha
sorted
nomes de arquivos. Você pode filtrar os resultados com base em uma específicaextension
, como'.txt'
,'.jpg'
e assim por diante.fonte
Partindo da sua pergunta, estou assumindo que você não deseja nomes de diretórios, apenas arquivos.
Exemplo:
Se você deseja apenas uma matriz dos caminhos de arquivos, use
return_object: false
:retorna:
Os créditos vão para https://gist.github.com/lovasoa/8691344#gistcomment-2927279
fonte
Aqui está uma versão recursiva assíncrona.
fonte
Adotou a abordagem geral de @ Hunan-Rostomyan, tornou um pouco mais conciso e acrescentou um
excludeDirs
argumento. Seria trivial estenderincludeDirs
, basta seguir o mesmo padrão:Exemplo de uso:
fonte
Sai da caixa
Caso você deseje um objeto com a estrutura de diretórios pronta para uso, recomendo que você verifique a árvore de diretórios .
Digamos que você tenha essa estrutura:
Retornará:
Objeto personalizado
Caso contrário, se você deseja criar um objeto de árvore de diretórios com suas configurações personalizadas , consulte o seguinte snippet. Um exemplo ao vivo é visível nesta caixa de código .
Então você pode simplesmente fazer:
fonte
Esta é uma solução TypeScript, opcionalmente recursiva, opcionalmente de log de erros e assíncrona. Você pode especificar uma expressão regular para os nomes de arquivo que deseja encontrar.
Eu usei
fs-extra
, porque é uma melhoria fácil do super setfs
.fonte
Isso funcionará e armazenará o resultado no arquivo test.txt, que estará presente no mesmo diretório
fonte
Recentemente, criei uma ferramenta para isso que faz exatamente isso ... Ele busca um diretório de forma assíncrona e retorna uma lista de itens. Você pode obter diretórios, arquivos ou ambos, com as pastas sendo as primeiras. Você também pode paginar os dados caso não deseje buscar a pasta inteira.
https://www.npmjs.com/package/fs-browser
Este é o link, espero que ajude alguém!
fonte
Apenas um alerta: se você planeja executar operações em cada arquivo em um diretório, tente o vinyl-fs (usado pelo gulp , o sistema de criação de streaming).
fonte
Eu criei um módulo de nó para automatizar esta tarefa: mddir
Uso
nó mddir "../relative/path/"
Para instalar: npm install mddir -g
Para gerar descontos para o diretório atual: mddir
Para gerar para qualquer caminho absoluto: mddir / absolute / path
Para gerar um caminho relativo: mddir ~ / Documents / Whatever.
O arquivo md é gerado no seu diretório de trabalho.
Atualmente ignora as pastas node_modules e .git.
Solução de problemas
Se você receber o erro 'node \ r: não existe esse arquivo ou diretório', o problema é que o sistema operacional utiliza diferentes terminações de linha e o mddir não pode analisá-las sem definir explicitamente o estilo de final de linha como Unix. Isso geralmente afeta o Windows, mas também algumas versões do Linux. A definição das terminações da linha no estilo Unix deve ser realizada na pasta bin global mddir npm.
Correção de terminações de linha
Obtenha o caminho da pasta npm bin com:
npm config get prefix
CD nessa pasta
instalação de fermentação dos2unix
lib dos2unix / node_modules / mddir / src / mddir.js
Isso converte as terminações de linha em Unix em vez de Dos
Em seguida, execute normalmente com: node mddir "../relative/path/".
Exemplo de estrutura de arquivo de remarcação gerada 'directoryList.md'
fonte
Use o módulo de
npm
conteúdo da lista . Ele lê o conteúdo e o sub-conteúdo do diretório especificado e retorna a lista de caminhos de arquivos e pastas.fonte
fonte