Existe uma maneira mais fácil de copiar uma pasta e todo o seu conteúdo sem fazer manualmente uma sequência de fs.readir
, fs.readfile
, fs.writefile
recursivamente?
Basta saber se estou faltando uma função que idealmente funcionaria assim
fs.copy("/path/to/source/folder","/path/to/destination/folder");
javascript
node.js
lostsource
fonte
fonte
Respostas:
Você pode usar o módulo ncp . Eu acho que é disso que você precisa
fonte
npm install ncp
e trabalhando em menos de 30 anos. Obrigado.Esta é a minha abordagem para resolver esse problema sem nenhum módulo extra. Apenas usando o built-in
fs
e ospath
módulos.Nota: Isso usa as funções de leitura / gravação do fs para que não copie nenhum metadado (hora da criação, etc.). A partir do nó 8.5, existem
copyFileSync
funções disponíveis que chamam as funções de cópia do SO e, portanto, também copiam metadados. Ainda não os testei, mas deve funcionar apenas para substituí-los. (Consulte https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_flags )fonte
javascript var fs = require('fs'); var path = require('path');
fs.copy
ou,fs.copySync
como elas chamam, as funções de cópia no nível do SO no MacOS e Windows e, assim, copiar arquivos.fs.copyFile
e se sua escavação através da fonte nó que você vai ver em Mac e Windows que chamam a função OS específica para copiar um arquivoExistem alguns módulos que oferecem suporte à cópia de pastas com seu conteúdo. O mais popular seria chave
Uma alternativa seria node-fs-extra
fonte
wrench
está obsoleto e deverá ser substituído pornode-fs-extra
( github.com/jprichardson/node-fs-extra )Aqui está uma função que copia recursivamente um diretório e seu conteúdo para outro diretório:
fonte
fs.lstatSync
em vez defs.statSync
)linking
Não está copiando .. O problema é que quando você modifica o conteúdo do arquivo vinculado, o arquivo original também muda.fs-extra
trabalhou para mim quandoncp
ewrench
ficou aquém:https://www.npmjs.com/package/fs-extra
fonte
wrench
instrui os usuários a usaremfs-extra
como ele reprovou sua biblioteca.Para sistemas operacionais Linux / unix, você pode usar a sintaxe do shell
É isso aí!
fonte
O módulo fs-extra funciona como um encanto.
Instale o fs-extra
A seguir está o programa para copiar o diretório de origem no diretório de destino.
Referências
fs-extra: https://www.npmjs.com/package/fs-extra
Exemplo: Tutorial do NodeJS - Node.js Copiar uma Pasta
fonte
É assim que eu faria pessoalmente:
funciona para pastas e arquivos
fonte
Criei um pequeno exemplo de trabalho que copia uma pasta de origem para outra pasta de destino em apenas algumas etapas (com base na resposta @ shift66 usando o ncp):
etapa 1 - Instale o módulo ncp:
etapa 2 - crie copy.js (modifique os vars srcPath e destPath para o que você precisar):
passo 3 - executar
fonte
Isso é muito fácil com o nó 10.
Isso pressupõe
dest
que não existe.fonte
require('util').promisify
comfs.mkdir
e emfs.copyFile
vez derequire('fs').promises
, que ainda é experimental na v11.1.withFileTypes
opção? Porque isso economiza umastat
chamadawithFileTypes
opção.Eu já sei muitas respostas aqui, mas ninguém respondeu de maneira simples. Em relação à documentação oficial fs-exra , você pode fazer isso com muita facilidade
fonte
{ recursive: true }
do documento do github que você mencionou, não sei se funciona.Como estou apenas criando um script de nó simples, não queria que os usuários do script precisassem importar vários módulos e dependências externas, então coloquei meu pensamento e fiz uma pesquisa para executar comandos a partir do bash Concha.
Este trecho de código node.js copia recursivamente uma pasta chamada node-webkit.app para uma pasta chamada build:
Agradeço a Lance Pollard no dzone por me ajudar a começar.
O trecho acima é limitado a plataformas baseadas em Unix, como Mac OS e Linux, mas uma técnica semelhante pode funcionar no Windows.
fonte
@ mallikarjun-m obrigado!
fs-extra fez a coisa e pode até retornar o Promise se você não fornecer retorno de chamada! :)
fonte
Aquele com suporte a link simbólico + não lança se o diretório existir.
fonte
Esse código funcionará bem, copiando recursivamente qualquer pasta para qualquer local. Apenas Windows.
Funciona perfeitamente no meu jogo baseado em texto para criar novos jogadores.
fonte
Eu tentei fs-extra e copy-dir para copiar pasta-recursivamente. mas eu quero isso
Então eu escrevi o meu:
e uma função semelhante mkdirs, que é uma alternativa ao mkdirp
fonte
Eu escrevi essa função para copiar (copiarFileSync) ou mover (renomearSync) arquivos recursivamente entre diretórios:
fonte
Se você está no Linux e o desempenho não é um problema, você pode usar a
exec
função dochild_process
módulo para executar um comando bash:Em alguns casos, achei essa solução mais limpa do que baixar um módulo inteiro ou até mesmo usá-lo
fs
.fonte
O ncp bloqueia o descritor de arquivo e aciona o retorno de chamada quando ele ainda não foi desbloqueado. Eu recomendo usar o módulo de cópia recursiva . Ele suporta eventos e você pode ter certeza do final da cópia.
fonte
Tenha cuidado ao escolher seu pacote. Alguns pacotes, como copy-dir, não suportam arquivos grandes de cópia com mais de 0x1fffffe8 caracteres. Irá gerar algum erro como:
Eu experimentei algo assim em um dos meus projetos. Por fim, tive que mudar o pacote que estava usando e ajustar muito código. Eu diria que essa não é uma experiência muito agradável.
Se desejar várias cópias de origem e de destino, é possível usar uma cópia melhor e escrever algo como isto:
ou até:
fonte
SIM,
ncp
écool
...Você pode querer / deve prometer sua função de fazer é
super cool
. Como você está nisso, adicione-o a umtools
arquivo para reutilizá-lo.Abaixo está uma versão de trabalho que é
Async
e usaPromises
.index.js
tools.js
fonte
A abordagem mais fácil para esse problema é usar apenas os módulos 'fs' e 'Path' e alguma lógica ...
Todos os arquivos na pasta raiz copiam com o Novo Nome, se você quiser apenas definir o número da versão, ou seja, ....................... "var v = 'Seu Diretório Nome'"
no prefixo Nome do arquivo V conteúdo adicionado com o nome do arquivo.
fonte
Foi assim que eu fiz:
então:
Em seguida, chame o método:
fonte