Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Có vẻ như NCP và cờ lê đều không còn được duy trì. Có lẽ là lựa chọn tốt nhất là sử dụng FS-Extrancp and wrench both are no longer maintained. Probably the best option is to use fs-extra

Nhà phát triển cờ lê chỉ đạo người dùng sử dụng

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
0 vì anh ta đã phản đối thư viện của mình

Cả Copysync & Movesync đều sẽ sao chép và di chuyển các thư mục ngay cả khi họ có tệp hoặc thư mục con và bạn có thể dễ dàng di chuyển hoặc sao chép các tệp bằng cách sử dụng nó & moveSync both will copy and move folders even if they have files or subfolders and you can easily move or copy files using it

const fse = require('fs-extra');

const srcDir = `path/to/file`;
const destDir = `path/to/destination/directory`;
                                 
// To copy a folder or file, select overwrite accordingly
try {
  fs.copySync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}

HOẶC

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

KURT

1052 Huy hiệu bạc11 Huy hiệu đồng2 silver badges11 bronze badges

Đã trả lời ngày 23 tháng 10 năm 2020 lúc 10:07Oct 23, 2020 at 10:07

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

AryanaryanAryan

3.1392 Huy hiệu vàng16 Huy hiệu bạc41 Huy hiệu đồng2 gold badges16 silver badges41 bronze badges

6

Đây là cách tiếp cận của tôi để giải quyết vấn đề này mà không có bất kỳ mô -đun bổ sung nào. Chỉ cần sử dụng các mô-đun

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
1 và
// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
2 tích hợp.

Lưu ý: Điều này không sử dụng các chức năng đọc / ghi của FS, vì vậy nó không sao chép bất kỳ dữ liệu meta nào (thời gian tạo, v.v.). Kể từ Node.js 8.5, có sẵn chức năng

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
3 gọi các chức năng sao chép hệ điều hành và do đó cũng sao chép dữ liệu meta. Tôi đã không kiểm tra chúng, nhưng nó nên hoạt động để thay thế chúng. (Xem https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_flags) This does use the read / write functions of fs, so it does not copy any meta data (time of creation, etc.). As of Node.js 8.5 there is a
// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
3 function available which calls the OS copy functions and therefore also copies meta data. I did not test them yet, but it should work to just replace them. (See 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 );
            }
        } );
    }
}

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 25 tháng 9 năm 2014 lúc 12:43Sep 25, 2014 at 12:43

Simon Zyxsimon ZyxSimon Zyx

5,8431 Huy hiệu vàng24 Huy hiệu bạc36 Huy hiệu đồng1 gold badge24 silver badges36 bronze badges

8

Đây là một chức năng sao chép đệ quy một thư mục và nội dung của nó sang một thư mục khác:

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);
  }
};

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 5 tháng 3 năm 2014 lúc 0:04Mar 5, 2014 at 0:04

3

Có một số mô -đun hỗ trợ sao chép các thư mục với nội dung của chúng. Phổ biến nhất sẽ là cờ lê.js:

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');

Một giải pháp thay thế sẽ là Node-FS-Extra:

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

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 9 tháng 12 năm 2012 lúc 9:26Dec 9, 2012 at 9:26

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Zemircozemircozemirco

15.8k8 Huy hiệu vàng60 Huy hiệu bạc93 Huy hiệu Đồng8 gold badges60 silver badges93 bronze badges

5

Đây là cách tôi sẽ làm điều đó một cách cá nhân:

function copyFolderSync(from, to) {
    fs.mkdirSync(to);
    fs.readdirSync(from).forEach(element => {
        if (fs.lstatSync(path.join(from, element)).isFile()) {
            fs.copyFileSync(path.join(from, element), path.join(to, element));
        } else {
            copyFolderSync(path.join(from, element), path.join(to, element));
        }
    });
}

Nó hoạt động cho các thư mục và tập tin.

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 14 tháng 9 năm 2018 lúc 19:42Sep 14, 2018 at 19:42

3

Vì nút v16.7.0 có thể sử dụng hàm

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
4 hoặc
// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
5.

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

Tính ổn định hiện tại (trong nút v18.7.0) là thử nghiệm.

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

mất nguồn

20.3k9 Huy hiệu vàng65 Huy hiệu bạc88 Huy hiệu Đồng9 gold badges65 silver badges88 bronze badges

Đã trả lời ngày 2 tháng 11 năm 2021 lúc 8:58Nov 2, 2021 at 8:58

Jax-pJax-pJax-p

6.1572 Huy hiệu vàng21 Huy hiệu bạc51 Huy hiệu Đồng2 gold badges21 silver badges51 bronze badges

Đối với hệ điều hành Linux/Unix, bạn có thể sử dụng cú pháp shell

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

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

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

Đó là nó!

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 8 tháng 12 năm 2016 lúc 0:58Dec 8, 2016 at 0:58

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Abdennour toumiabdennour toumiAbdennour TOUMI

80.1k36 Huy hiệu vàng233 Huy hiệu bạc242 Huy hiệu Đồng36 gold badges233 silver badges242 bronze badges

7

Mô-đun FS-Extra hoạt động như một sự quyến rũ.

Cài đặt FS-Extra:

$ npm install fs-extra

Sau đây là chương trình sao chép thư mục nguồn vào thư mục đích.

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
0

Người giới thiệu

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

Ví dụ: Hướng dẫn Node.js - Node.js Sao chép thư mục

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 11 tháng 10 năm 2017 lúc 10:06Oct 11, 2017 at 10:06

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Mallikarjun mmallikarjun mMallikarjun M

1.5671 Huy hiệu vàng18 Huy hiệu bạc19 Huy hiệu đồng1 gold badge18 silver badges19 bronze badges

1

Điều này khá dễ dàng với Node.js 10:

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
1

Điều này giả định

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
6 không tồn tại.

Đã trả lời ngày 28 tháng 9 năm 2018 lúc 20:52Sep 28, 2018 at 20:52

mpenmpenmpen

262K259 Huy hiệu vàng817 Huy hiệu bạc1191 Huy hiệu Đồng259 gold badges817 silver badges1191 bronze badges

4

Tôi biết rất nhiều câu trả lời đã ở đây, nhưng không ai trả lời nó một cách đơn giản.

Về tài liệu chính thức của FS-Exra, bạn có thể làm điều đó rất dễ dàng.

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
2

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 30 tháng 9 năm 2019 lúc 13:03Sep 30, 2019 at 13:03

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

5

Tôi đã tạo một ví dụ làm việc nhỏ, sao chép thư mục nguồn lên một thư mục đích khác chỉ trong một vài bước (dựa trên câu trả lời của Shift66 bằng NCP):

Bước 1 - Cài đặt mô -đun NCP:

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
3

Bước 2 - Tạo COPY.js (sửa đổi các biến SRCPath và DestPath thành bất cứ điều gì bạn cần):

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
4

Bước 3 - Chạy

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
5

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 3 tháng 2 năm 2016 lúc 16:15Feb 3, 2016 at 16:15

ShaharshaharShahar

2.1891 Huy hiệu vàng25 Huy hiệu bạc32 Huy hiệu đồng1 gold badge25 silver badges32 bronze badges

Một trong những hỗ trợ liên kết tượng trưng:symbolic link support:

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
6

Đã trả lời ngày 23 tháng 6 năm 2020 lúc 21:26Jun 23, 2020 at 21:26

allxallxallx

2424 Huy hiệu bạc4 Huy hiệu đồng4 silver badges4 bronze badges

Vì tôi chỉ đang xây dựng một tập lệnh Node.js đơn giản, tôi không muốn người dùng tập lệnh cần nhập một loạt các mô -đun và phụ thuộc bên ngoài, vì vậy tôi đã đưa vào giới hạn suy nghĩ của mình và tìm kiếm các lệnh chạy từ các lệnh chạy từ vỏ bash.

Snippet mã nút này

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
7

Cảm ơn Lance Pollard tại Dzone vì đã bắt đầu tôi.

Đoạn trích ở trên được giới hạn trong các nền tảng dựa trên UNIX, như MacOS và Linux, nhưng một kỹ thuật tương tự có thể hoạt động cho Windows.

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 23 tháng 1 năm 2014 lúc 23:27Jan 23, 2014 at 23:27

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Jamesmortensenjamesmortensenjamesmortensen

33.1k11 Huy hiệu vàng95 Huy hiệu bạc118 Huy hiệu đồng11 gold badges95 silver badges118 bronze badges

1

Mallikarjun M, Cảm ơn bạn!

FS-Extra đã làm điều đó và nó thậm chí có thể trả lại một lời hứa nếu bạn không cung cấp một cuộc gọi lại! :) did the thing and it can even return a Promise if you do not provide a callback! :)

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
8

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 16 tháng 4 năm 2018 lúc 19:40Apr 16, 2018 at 19:40

LuckyLookeluckylokeLuckylooke

3.5993 Huy hiệu vàng31 Huy hiệu bạc43 Huy hiệu đồng3 gold badges31 silver badges43 bronze badges

0

Vì nút v16.7.0:

// To Move a folder or file, select overwrite accordingly
try {
  fs.moveSync(srcDir, destDir, { overwrite: true|false })
  console.log('success!')
} catch (err) {
  console.error(err)
}
9

Lưu ý cẩn thận việc sử dụng

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
7. Điều này ngăn ngừa lỗi
// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
8.

Đọc thêm về tài liệu hệ thống tập tin nút

Đã trả lời ngày 29 tháng 3 lúc 21:58Mar 29 at 21:58

Benny Powersbenny PowersBenny Powers

4.9434 Huy hiệu vàng24 Huy hiệu bạc48 Huy hiệu đồng4 gold badges24 silver badges48 bronze badges

Tôi đã thử FS-Extra và Copy-DIR để sao chép lại theo dõi. Nhưng tôi muốn nó

  1. Làm việc bình thường (sao chép-dir ném lỗi không hợp lý)
  2. Cung cấp hai đối số trong bộ lọc: FilePath và FileType (FS-Extra không nói FileType)
  3. Kiểm tra Dir-to-Subdir và séc Dir-to-File

Vì vậy, tôi đã viết của riêng tôi:

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 );
            }
        } );
    }
}
0

Và một chức năng tương tự, MKDIRS, là một giải pháp thay thế cho MKDIRP:

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 );
            }
        } );
    }
}
1

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 10 tháng 1 năm 2019 lúc 15:37Jan 10, 2019 at 15:37

Fuweichinfuweichinfuweichin

9919 Huy hiệu bạc11 Huy hiệu đồng9 silver badges11 bronze badges

Hãy cẩn thận khi chọn gói hàng của bạn. Một số gói như Copy-DIR không hỗ trợ sao chép các tệp lớn dài hơn 0x1fffffe8 ký tự (khoảng 537 MB).

Nó sẽ ném một số lỗi như:

Buffer.js: 630 Lỗi không bị bắt: Không thể tạo chuỗi dài hơn 0x1fffffe8 ký tự

Tôi đã trải nghiệm một cái gì đó như thế này trong một trong những dự án của tôi. Cuối cùng, tôi đã phải thay đổi gói tôi đang sử dụng và điều chỉnh rất nhiều mã. Tôi sẽ nói rằng đây không phải là một trải nghiệm rất dễ chịu.

Nếu mong muốn nhiều nguồn và nhiều bản sao đích, bạn có thể sử dụng bản sao tốt hơn và viết một cái gì đó như thế này:

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 );
            }
        } );
    }
}
2

Hoặc thậm chí:

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 );
            }
        } );
    }
}
3

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 22 tháng 5 năm 2020 lúc 0:04May 22, 2020 at 0:04

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Donovan Pdonovan pDonovan P

4924 Huy hiệu bạc6 Huy hiệu đồng4 silver badges6 bronze badges

Sử dụng shelljs

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
9

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 );
            }
        } );
    }
}
4

Đã trả lời ngày 6 tháng 1 năm 2021 lúc 13:47Jan 6, 2021 at 13:47

LiakosliakosLiakos

4544 Huy hiệu bạc10 Huy hiệu đồng4 silver badges10 bronze badges

Tôi đã viết chức năng này cho cả hai tệp sao chép (copyfilesync) hoặc di chuyển (Renamesync) đệ quy giữa các thư mục:

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 );
            }
        } );
    }
}
5

Jvalanen

2.6991 Huy hiệu vàng15 Huy hiệu bạc9 Huy hiệu đồng1 gold badge15 silver badges9 bronze badges

Đã trả lời ngày 23 tháng 4 năm 2019 lúc 8:51Apr 23, 2019 at 8:51

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

EladtaleladtalEladTal

1.6071 Huy hiệu vàng15 Huy hiệu bạc10 Huy hiệu đồng1 gold badge15 silver badges10 bronze badges

Phiên bản TypeScript

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 );
            }
        } );
    }
}
6

Đã trả lời ngày 23 tháng 3 lúc 12:30Mar 23 at 12:30

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

stpoastpoastpoa

4.8532 Huy hiệu vàng12 Huy hiệu bạc23 Huy hiệu đồng2 gold badges12 silver badges23 bronze badges

1

Nếu bạn đang sử dụng Linux và hiệu suất không phải là vấn đề, bạn có thể sử dụng hàm

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
0 từ mô -đun
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
1, để thực hiện lệnh bash:

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 );
            }
        } );
    }
}
7

Trong một số trường hợp, tôi thấy giải pháp này sạch hơn hơn là tải xuống toàn bộ mô -đun hoặc thậm chí sử dụng mô -đun

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
1.

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 3 tháng 3 năm 2020 lúc 8:31Mar 3, 2020 at 8:31

Emilio Grisolíaemilio GrisolíaEmilio Grisolía

1.1731 huy hiệu vàng9 Huy hiệu bạc14 Huy hiệu đồng1 gold badge9 silver badges14 bronze badges

2

Mã này sẽ hoạt động tốt, sao chép đệ quy bất kỳ thư mục nào đến bất kỳ vị trí nào. Nhưng nó chỉ là Windows.

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 );
            }
        } );
    }
}
8

Nó hoạt động hoàn hảo cho trò chơi văn bản của tôi để tạo người chơi mới.

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 19 tháng 11 năm 2014 lúc 15:06Nov 19, 2014 at 15:06

Nếu bạn muốn sao chép tất cả các nội dung của thư mục nguồn một cách đệ quy thì bạn cần vượt qua tùy chọn

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
3 dưới dạng
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
4 và
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
5
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
6 được FS-Extra ghi lại cho
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
7

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
0 hoàn toàn thay thế
// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
1 nên bạn không cần nhập mô -đun cơ sở

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 );
            }
        } );
    }
}
9

Đã trả lời ngày 2 tháng 12 năm 2020 lúc 10:42Dec 2, 2020 at 10:42

Ahsan.AminAhsan.AminAhsan.Amin

7166 Huy hiệu bạc14 Huy hiệu Đồng6 silver badges14 bronze badges

Đối với các phiên bản nút cũ không có

// Deep-copy an existing directory
wrench.copyDirSyncRecursive('directory_to_copy', 'location_where_copy_should_end_up');
4, tôi đang sử dụng nó trong một nhúm để tránh yêu cầu thư viện của bên thứ ba:

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);
  }
};
0

Ưu điểm (hoặc phân biệt) liên quan đến câu trả lời hiện có:

  • không đồng bộ
  • bỏ qua các liên kết tượng trưng
  • Không ném nếu một thư mục đã tồn tại (không bắt được cú ném
    function copyFolderSync(from, to) {
        fs.mkdirSync(to);
        fs.readdirSync(from).forEach(element => {
            if (fs.lstatSync(path.join(from, element)).isFile()) {
                fs.copyFileSync(path.join(from, element), path.join(to, element));
            } else {
                copyFolderSync(path.join(from, element), path.join(to, element));
            }
        });
    }
    
    1 nếu điều này là không mong muốn)
  • Khá ngắn gọn

Đã trả lời ngày 21 tháng 4 lúc 16:13Apr 21 at 16:13

Ggorlenggorlenggorlen

37.1K7 Huy hiệu vàng61 Huy hiệu bạc78 Huy hiệu đồng7 gold badges61 silver badges78 bronze badges

Đây có thể là một giải pháp khả thi sử dụng hàm máy phát Async và lặp lại với vòng lặp

function copyFolderSync(from, to) {
    fs.mkdirSync(to);
    fs.readdirSync(from).forEach(element => {
        if (fs.lstatSync(path.join(from, element)).isFile()) {
            fs.copyFileSync(path.join(from, element), path.join(to, element));
        } else {
            copyFolderSync(path.join(from, element), path.join(to, element));
        }
    });
}
2. Giải pháp này bao gồm khả năng lọc ra một số thư mục truyền chúng như một đối số mảng thứ ba tùy chọn.

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);
  }
};
1

Then:

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);
  }
};
2

Đã trả lời ngày 30 tháng 4 lúc 16:43Apr 30 at 16:43

1

Câu trả lời hàng đầu hiện tại có thể được đơn giản hóa rất nhiều.

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);
  }
};
3

Đã trả lời ngày 3 tháng 3 lúc 3:44Mar 3 at 3:44

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Solosodiumsolosodiumsolosodium

7135 Huy hiệu bạc15 Huy hiệu Đồng5 silver badges15 bronze badges

Đây là cách tôi đã làm điều đó:

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);
  }
};
4

Then:

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);
  }
};
5

Sau đó gọi phương thức:

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);
  }
};
6

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 8 tháng 11 năm 2018 lúc 16:35Nov 8, 2018 at 16:35

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Uyghurbeguyhurbeguyghurbeg

1583 Huy hiệu bạc7 Huy hiệu đồng3 silver badges7 bronze badges

Vâng, function copyFolderSync(from, to) { fs.mkdirSync(to); fs.readdirSync(from).forEach(element => { if (fs.lstatSync(path.join(from, element)).isFile()) { fs.copyFileSync(path.join(from, element), path.join(to, element)); } else { copyFolderSync(path.join(from, element), path.join(to, element)); } }); } 3 là function copyFolderSync(from, to) { fs.mkdirSync(to); fs.readdirSync(from).forEach(element => { if (fs.lstatSync(path.join(from, element)).isFile()) { fs.copyFileSync(path.join(from, element), path.join(to, element)); } else { copyFolderSync(path.join(from, element), path.join(to, element)); } }); } 4 mặc dù ...

Bạn có thể muốn/nên hứa hóa chức năng của nó để làm cho nó

function copyFolderSync(from, to) {
    fs.mkdirSync(to);
    fs.readdirSync(from).forEach(element => {
        if (fs.lstatSync(path.join(from, element)).isFile()) {
            fs.copyFileSync(path.join(from, element), path.join(to, element));
        } else {
            copyFolderSync(path.join(from, element), path.join(to, element));
        }
    });
}
5. Trong khi bạn đang ở đó, hãy thêm nó vào tệp
function copyFolderSync(from, to) {
    fs.mkdirSync(to);
    fs.readdirSync(from).forEach(element => {
        if (fs.lstatSync(path.join(from, element)).isFile()) {
            fs.copyFileSync(path.join(from, element), path.join(to, element));
        } else {
            copyFolderSync(path.join(from, element), path.join(to, element));
        }
    });
}
6 để sử dụng lại nó.

Dưới đây là phiên bản làm việc là

function copyFolderSync(from, to) {
    fs.mkdirSync(to);
    fs.readdirSync(from).forEach(element => {
        if (fs.lstatSync(path.join(from, element)).isFile()) {
            fs.copyFileSync(path.join(from, element), path.join(to, element));
        } else {
            copyFolderSync(path.join(from, element), path.join(to, element));
        }
    });
}
7 và sử dụng
function copyFolderSync(from, to) {
    fs.mkdirSync(to);
    fs.readdirSync(from).forEach(element => {
        if (fs.lstatSync(path.join(from, element)).isFile()) {
            fs.copyFileSync(path.join(from, element), path.join(to, element));
        } else {
            copyFolderSync(path.join(from, element), path.join(to, element));
        }
    });
}
8.


Tệp Index.js

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);
  }
};
7

Công cụ tập tin.js

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);
  }
};
8

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 18 tháng 10 năm 2017 lúc 3:37Oct 18, 2017 at 3:37

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

MickmickMick

29.3K13 Huy hiệu vàng108 Huy hiệu bạc130 Huy hiệu đồng13 gold badges108 silver badges130 bronze badges

Cách tiếp cận dễ nhất cho vấn đề này là chỉ sử dụng mô -đun 'FS' và 'Path' và một số logic ...

Tất cả các tệp trong thư mục gốc với tên mới nếu bạn muốn chỉ đặt số phiên bản, tức là, "var v = 'tên thư mục của bạn'"

Trong tiền tố tên tệp với nội dung được thêm với tên tệp.

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);
  }
};
9

Hướng dẫn copy folder nodejs - sao chép thư mục nodejs

Đã trả lời ngày 25 tháng 8 năm 2018 lúc 9:55Aug 25, 2018 at 9:55

MM Furkanmm FurkanMM Furkan

531 Huy hiệu bạc9 Huy hiệu đồng1 silver badge9 bronze badges

0