NodeJS - 递归复制和重命名现有目录中的所有内容

use*_*556 3 filesystems node.js

我有一个包含文件夹和文件的目录。我想将整个目录及其所有内容复制到不同的位置,同时将所有文件重命名为更有意义的名称。我想用nodejs来完成这一系列的操作。除了一一移动并一一重命名之外,还有什么简单的方法可以做到?

谢谢。

——谢谢评论!所以这是我想到的一个示例目录:

-MyFridge
 - MyFood.txt
  - MyApple.txt
  - MyOrange.txt
  - ...
 - MyDrinks
  - MySoda
    - MyDietCoke.txt
  - MyMilk.txt
  - ...
 - MyDesserts
 - MyIce
 ...
Run Code Online (Sandbox Code Playgroud)

例如,我想用“Tom”替换“My”,并且我还想在所有文本文件中将“My”重命名为 Tom。我可以使用 node-fs-extra 将目录复制到不同的位置,但是我很难重命名文件名。

gri*_*son 5

定义自己的工具

const fs = require('fs');
const path = require('path');


function renameFilesRecursive(dir, from, to) {

   fs.readdirSync(dir).forEach(it => {
     const itsPath = path.resolve(dir, it);
     const itsStat = fs.statSync(itsPath);

     if (itsPath.search(from) > -1) {
       fs.renameSync(itsPath, itsPath.replace(from, to))
     }

     if (itsStat.isDirectory()) {     
       renameFilesRecursive(itsPath.replace(from, to), from, to)
     } 
   })
}
Run Code Online (Sandbox Code Playgroud)

用法

const dir = path.resolve(__dirname, 'src/app');

renameFilesRecursive(dir, /^My/, 'Tom');

renameFilesRecursive(dir, /\.txt$/, '.class');
Run Code Online (Sandbox Code Playgroud)