使用 node.js 重命名文件

Posted

技术标签:

【中文标题】使用 node.js 重命名文件【英文标题】:Renaming files using 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 做到这一点,但我在这里有点迷茫,我会很感激一些线索。

提前致谢!

【问题讨论】:

【参考方案1】:

您需要为此使用fs:http://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】:
    fs.readdir(路径,回调) 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`);

就是这样!

【讨论】:

有什么理由比fs.rename更受欢迎吗? 它是同步的 - 但可以使用nodejs.org/api/fs.html#fs_fs_renamesync_oldpath_newpath【参考方案4】:

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

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

【讨论】:

以上是关于使用 node.js 重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

如果目标文件不存在,则在 Node.js 中异步重命名文件

重命名 node.js 续集时间戳列

在 node.js 中重命名 json 对象名称

Node.js 中 fs.renameSync 报错

为啥linux无法重命名文件

文件夹为啥无法重命名?