218 votes

Copier un dossier de façon récursive dans Node.js

Existe-t-il un moyen plus simple de copier un dossier et tout son contenu sans effectuer manuellement une séquence de fs.readir , fs.readfile , fs.writefile de manière récursive ?

Je me demande simplement s'il ne me manque pas une fonction qui fonctionnerait idéalement comme ceci :

fs.copy("/path/to/source/folder", "/path/to/destination/folder");

29voto

Pour un OS Linux/Unix, vous pouvez utiliser la syntaxe shell

const shell = require('child_process').execSync;

const src = `/path/src`;
const dist = `/path/dist`;

shell(`mkdir -p ${dist}`);
shell(`cp -r ${src}/* ${dist}`);

C'est ça !

22voto

Mallikarjun M Points 684

Le module fs-extra fonctionne comme un charme.

Installez fs-extra :

$ npm install fs-extra

Le programme suivant permet de copier un répertoire source vers un répertoire de destination.

// Include the fs-extra package
var fs = require("fs-extra");

var source = 'folderA'
var destination = 'folderB'

// Copy the source folder to the destination
fs.copy(source, destination, function (err) {
    if (err){
        console.log('An error occurred while copying the folder.')
        return console.error(err)
    }
    console.log('Copy completed!')
});

Références

fs-extra : https://www.npmjs.com/package/fs-extra

Exemple : Tutoriel Node.js - Node.js Copier un dossier

20voto

shift66 Points 4964

Vous pouvez utiliser ncp module. Je pense que c'est ce dont vous avez besoin

17voto

JaxCze Points 430

Depuis Node v16.7.0, il est possible d'utiliser la fonction fs.cp o fs.cpSync fonction.

fs.cp(src, dest, {recursive: true});

La stabilité actuelle (dans Node v17.0.1) est la suivante Expérimental .

16voto

Mark Points 49079

C'est assez facile avec Node.js 10 :

const Path = require('path');
const FSP = require('fs').promises;

async function copyDir(src,dest) {
    const entries = await FSP.readdir(src, {withFileTypes: true});
    await FSP.mkdir(dest);
    for(let entry of entries) {
        const srcPath = Path.join(src, entry.name);
        const destPath = Path.join(dest, entry.name);
        if(entry.isDirectory()) {
            await copyDir(srcPath, destPath);
        } else {
            await FSP.copyFile(srcPath, destPath);
        }
    }
}

Cela suppose dest n'existe pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X