수동의 순서를하지 않고 폴더와 모든 콘텐츠를 복사 할 수있는 쉬운 방법이 있습니까 fs.readir
, fs.readfile
, fs.writefile
재귀는?
이상적으로 이와 같이 작동하는 기능이 누락되어 있는지 궁금합니다.
fs.copy("/path/to/source/folder","/path/to/destination/folder");
답변
ncp 모듈을 사용할 수 있습니다 . 나는 이것이 당신이 필요로 생각합니다
답변
이것은 추가 모듈 없이이 문제를 해결하는 나의 접근 방식입니다. 내장 fs
및 path
모듈 만 사용하십시오 .
참고 : 이것은 fs의 읽기 / 쓰기 기능을 사용하므로 메타 데이터 (생성 시간 등)를 복사하지 않습니다. 노드 8.5부터는 copyFileSync
OS 복사 기능을 호출하여 메타 데이터를 복사 하는 기능이 있습니다. 아직 테스트하지는 않았지만 교체하는 것이 좋습니다. ( https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_flags 참조 )
var fs = require('fs');
var path = require('path');
function copyFileSync( source, target ) {
var targetFile = target;
//if target is a directory a new file with the same name will be created
if ( fs.existsSync( target ) ) {
if ( fs.lstatSync( target ).isDirectory() ) {
targetFile = path.join( target, path.basename( source ) );
}
}
fs.writeFileSync(targetFile, fs.readFileSync(source));
}
function copyFolderRecursiveSync( source, target ) {
var files = [];
//check if folder needs to be created or integrated
var targetFolder = path.join( target, path.basename( source ) );
if ( !fs.existsSync( targetFolder ) ) {
fs.mkdirSync( targetFolder );
}
//copy
if ( fs.lstatSync( source ).isDirectory() ) {
files = fs.readdirSync( source );
files.forEach( function ( file ) {
var curSource = path.join( source, file );
if ( fs.lstatSync( curSource ).isDirectory() ) {
copyFolderRecursiveSync( curSource, targetFolder );
} else {
copyFileSync( curSource, targetFolder );
}
} );
}
}
답변
내용과 함께 폴더 복사를 지원하는 일부 모듈이 있습니다. 가장 인기있는 것은 렌치입니다
// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
fs.copy('/tmp/mydir', '/tmp/mynewdir', function (err) {
if (err) {
console.error(err);
} else {
console.log("success!");
}
}); //copies directory, even if it has subdirectories or files
답변
디렉토리를 재귀 적으로 복사하는 함수는 다음과 같습니다.
const fs = require("fs")
const path = require("path")
/**
* Look ma, it's cp -R.
* @param {string} src The path to the thing to copy.
* @param {string} dest The path to the new copy.
*/
var copyRecursiveSync = function(src, dest) {
var exists = fs.existsSync(src);
var stats = exists && fs.statSync(src);
var isDirectory = exists && stats.isDirectory();
if (isDirectory) {
fs.mkdirSync(dest);
fs.readdirSync(src).forEach(function(childItemName) {
copyRecursiveSync(path.join(src, childItemName),
path.join(dest, childItemName));
});
} else {
fs.copyFileSync(src, dest);
}
};
답변
답변
Linux / unix OS의 경우 쉘 구문을 사용할 수 있습니다
const shell = require('child_process').execSync ;
const src= `/path/src`;
const dist= `/path/dist`;
shell(`mkdir -p ${dist}`);
shell(`cp -r ${src}/* ${dist}`);
그게 다야!
답변
fs-extra 모듈은 매력처럼 작동합니다.
fs-extra 설치
$ npm install fs-extra
다음은 소스 디렉토리를 대상 디렉토리에 복사하는 프로그램입니다.
// include fs-extra package
var fs = require("fs-extra");
var source = 'folderA'
var destination = 'folderB'
// copy source folder to destination
fs.copy(source, destination, function (err) {
if (err){
console.log('An error occured while copying the folder.')
return console.error(err)
}
console.log('Copy completed!')
});
참고 문헌
fs-extra : https://www.npmjs.com/package/fs-extra
예 : NodeJS 튜토리얼 – 폴더 Node.js를 복사