【问题标题】:Renaming files using node.js使用 node.js 重命名文件
【发布时间】:2014-04-25 14:54:54
【问题描述】:

我在使用 JS 方面还很新,所以我会尽量具体:)

  • 我有一个包含 260 个不同国家名称的 .png 文件的文件夹:Afghanistan.pngAlbania.pngAlgeria.png 等。

  • 我有一个 .json 文件,其中包含一段代码,其中包含每个国家/地区的所有 ISO 代码,如下所示:

{ “AF”:“阿富汗”, “AL”:“阿尔巴尼亚”, “DZ”:“阿尔及利亚”, ... }
  • 我想用小写的 ISO 名称重命名 .png 文件。这意味着我希望在包含所有 .png 图像的文件夹中包含以下输入: af.pngal.pngdz.png

我试图自己研究如何使用 node.js 做到这一点,但我在这里有点迷茫,我会很感激一些线索。

提前致谢!

【问题讨论】:

    标签: javascript node.js rename


    【解决方案1】:

    您需要为此使用fshttp://nodejs.org/api/fs.html

    尤其是fs.rename() 函数:

    var fs = require('fs');
    fs.rename('/path/to/Afghanistan.png', '/path/to/AF.png', function(err) {
        if ( err ) console.log('ERROR: ' + err);
    });
    

    将它放在新读取的 JSON 对象的键和值的循环中,您就有了一个批量重命名脚本。

    fs.readFile('/path/to/countries.json', function(error, data) {
        if (error) {
            console.log(error);
            return;
        }
    
        var obj = JSON.parse(data);
        for(var p in obj) {
            fs.rename('/path/to/' + obj[p] + '.png', '/path/to/' + p + '.png', function(err) {
                if ( err ) console.log('ERROR: ' + err);
            });
        }
    });
    

    (这里假设您的 .json 文件是可信赖的,并且直接在文件名中使用其键和值是安全的。如果不是这种情况,请务必正确转义它们!)

    【讨论】:

    • 答案的最后两行非常重要:)
    • 您可以只导入 .json:const obj = require('/path/to/countries.json');,然后:for(var p in obj) {...}
    • 你可以,但是......不要。在该文件中使用require 执行代码。您正在为某人引入一种可能将恶意代码注入应用程序的方法(即,通过修改 .json 文件)。阅读和使用JSON.parse() 可以完全避免这种情况。不要为了编写更少的代码而牺牲安全性。
    • 使用path.resolve 比连接路径字符串更安全。
    • 同步版fs.renameSync(oldPath, newPath);
    【解决方案2】:
    1. fs.readdir(路径,回调)
    2. fs.rename(old,new,callback)

    通过http://nodejs.org/api/fs.html

    一件重要的事情 - 您也可以使用同步功能。 (它会像 C 程序一样工作)

    【讨论】:

      【解决方案3】:

      对于 linux/unix 操作系统,可以使用 shell 语法

      const shell = require('child_process').execSync ; 
      
      const currentPath= `/path/to/name.png`;
      const newPath= `/path/to/another_name.png`;
      
      shell(`mv ${currentPath} ${newPath}`);
      

      就是这样!

      【讨论】:

      【解决方案4】:

      对于同步重命名使用fs.renameSync

      fs.renameSync('/path/to/Afghanistan.png', '/path/to/AF.png');
      

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 2020-06-09
        • 2016-05-22
        • 2016-05-29
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 2013-08-24
        相关资源
        最近更新 更多