使用 node.js 重命名文件
Posted
技术标签:
【中文标题】使用 node.js 重命名文件【英文标题】:Renaming files using node.js 【发布时间】:2014-04-25 14:54:54 【问题描述】:我在使用 JS 方面还很新,所以我会尽量具体:)
我有一个包含 260 个不同国家名称的 .png 文件的文件夹:Afghanistan.png
、Albania.png
、Algeria.png
等。
我有一个 .json 文件,其中包含一段代码,其中包含每个国家/地区的所有 ISO 代码,如下所示:
“AF”:“阿富汗”, “AL”:“阿尔巴尼亚”, “DZ”:“阿尔及利亚”, ... 我想用小写的 ISO 名称重命名 .png 文件。这意味着我希望在包含所有.png
图像的文件夹中包含以下输入:
af.png
、al.png
、dz.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 重命名文件的主要内容,如果未能解决你的问题,请参考以下文章