前言
通过递归遍历复制文件夹A中的所有文件至文件夹B,在复制过程中,如果遇到相同路径下存在同名文件,将会使用文件夹A中的文件来替换文件夹B中的同名文件。这样可以确保文件夹B内的文件与文件夹A保持同步,避免冲突和旧版本文件的存在。
该过程将逐一比较文件夹A和文件夹B中的文件,确保目标文件夹B中的文件与源文件夹A中的文件一致性。这种文件级别的同步机制可在软件开发、版本控制等场景中提供可靠的文件管理和保持一致性的功能。
通过这种递归复制和替换的方法,可以确保在文件夹B中的相同路径下的文件始终是最新的版本,从而避免了潜在的冲突和不一致性。这种专业的文件复制和替换机制可以提高文件管理的效率和可靠性,为项目的开发和维护提供了有力的支持。
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
// 指定源文件夹和目标文件夹路径
let sourceFolder = './folderA'; // 源文件夹,中台文件
let targetFolder = './folderB'; // 目标文件夹
// 将异步函数转换为 Promise
const readdir = promisify(fs.readdir); // readdir函数用于读取指定路径下的目录内容,将目录中的文件和子目录作为数组返回。
const stat = promisify(fs.stat); // stat函数用于获取指定路径的文件或目录的详细信息,包括文件大小、修改时间等。
const copyFile = promisify(fs.copyFile); // copyFile函数用于将源文件复制到目标文件。它接受两个参数,分别是源文件路径和目标文件路径。
const mkdir = promisify(fs.mkdir); // mkdir函数用于创建目录。它接受两个参数,第一个参数是要创建的目录的路径,第二个参数是一个选项对象(可选),用于指定创建目录时的行为。
// 递归复制文件夹
async function copyFolder(source, target) {
// 读取源文件夹内容
const files = await readdir(source);
// 遍历文件夹内容
for (const file of files) {
// 构建文件/文件夹路径
const sourcePath = path.join(source, file);
const targetPath = path.join(target, file);
// 获取文件/文件夹的详细信息
const stats = await stat(sourcePath);
// 检查是否为文件夹
if (stats.isDirectory()) {
// 排除指定文件夹
if (['node_modules', 'dist', '.svn'].includes(file)) {
continue;
}
// 如果目标文件夹不存在,则创建
if (!fs.existsSync(targetPath)) {
// 在目标文件夹中创建对应的文件夹
await mkdir(targetPath);
}
// 递归复制子文件夹
await copyFolder(sourcePath, targetPath);
} else {
// 复制文件到目标文件夹
await copyFile(sourcePath, targetPath);
}
}
}
// 执行复制操作
copyFolder(sourceFolder, targetFolder)
.then(() => {
console.log('文件夹复制完成');
})
.catch(err => {
console.error('文件夹复制失败:', err);
});