新用户注册入口 老用户登录入口

[转载]node重命名文件名_node文件批量重命名

文章作者:转载 更新时间:2023-12-30 19:15:04 阅读数量:66
文章标签:Nodejsfs模块文件操作批量重命名文本/图片文件自增索引
本文摘要:本文作者借助Node.js的fs模块,实现了一个批量重命名文件的脚本,满足了对文本、图片等文件按照数字编号进行统一命名的需求。在详细介绍过程中,涉及到了fs模块提供的文件读取、写入、目录操作等关键功能,并通过实际代码展示了如何创建读写流及使用管道进行文件内容传输。遵循DRY原则,该脚本自动化处理了文件重命名任务,提升了办公效率,体现了Node.js在非浏览器环境下的强大应用能力。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_33205138/article/details/112036462。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

在一个实际需求中,需要对一批文件(如:文本、图片)进行重命名,按照数字编号。正好借此熟悉了一下node的fs文件操作,写了一个批量修改文件名的脚本。

原文链接

需求

现有以下图片文件

修改前

需要批量修改文件名称,变为统一前缀名称并且自增索引,修改后效果

修改后

最简单的人力操作就是逐个文件重命名,但本着DRY(Don't repeat yourself)原则,还是写一个node脚本搞定。

研究

node中要进行文件操作需要了解一下fs模块

在fs模块中有同步和异步两种方式

读取文件

//异步

fs.readFile('test.txt', 'utf-8' (err, data) => {

if (err) {

throw err;

}

console.log(data);

});

//同步

let data = fs.readFileSync('test.txt');

console.log(data);

异步读取文件参数:文件路径,编码方式,回调函数

写入文件

fs.writeFile('test2.txt', 'this is text', { 'flag': 'w' }, err => {

if (err) {

throw err;

}

console.log('saved');

});

写入文件参数:目标文件,写入内容,写入形式,回调函数

flag写入方式:

r:读取文件

w:写文件

a:追加

创建目录

fs.mkdir('dir', (err) => {

if (err) {

throw err;

}

console.log('make dir success');

});

dir为新建目录名称

读取目录

fs.readdir('dir',(err, files) => {

if (err) {

throw err;

}

console.log(files);

});

dir为读取目录名称,files为目录下的文件或目录名称数组

获取文件信息

fs.stat('test.txt', (err, stats)=> {

console.log(stats.isFile()); //true

})

获取文件信息后stats方法:

方法

说明

stats.isFile()

是否为文件

stats.isDirectory()

是否为目录

stats.isBlockDevice()

是否为块设备

stats.isCharacterDevice()

是否为字符设备

stats.isSymbolicLink()

是否为软链接

stats.isFIFO()

是否为UNIX FIFO命令管道

stats.isSocket()

是否为Socket

创建读取流

let stream = fs.createReadStream('test.txt');

创建写入流

let stream = fs.createWriteStreamr('test_copy.txt');

开发

开发思路:

读取源目录

判读存放目录是否存在,不存在时新建目录

复制文件

判断复制内容是否为文件

创建读取流

创建写入流

链接管道,写入文件内容

let fs = require('fs'),

src = 'src',

dist = 'dist',

args = process.argv.slice(2),

filename = 'image',

index = 0;

//show help

if (args.length === 0 || args[0].match('--help')) {

console.log('--help\n \t-src 文件源\n \t-dist 文件目标\n \t-n 文件名\n \t-i 文件名索引\n');

return false;

}

args.forEach((item, i) => {

if (item.match('-src')) {

src = args[i + 1];

} else if (item.match('-dist')) {

dist = args[i + 1];

} else if (item.match('-n')) {

filename = args[i + 1];

} else if (item.match('-i')) {

index = args[i + 1];

}

});

fs.readdir(src, (err, files) => {

if (err) {

console.log(err);

} else {

fs.exists(dist, exist => {

if (exist) {

copyFile(files, src, dist, filename, index);

} else {

fs.mkdir(dist, () => {

copyFile(files, src, dist, filename, index);

})

}

});

}

});

function copyFile(files, src, dist, filename, index) {

files.forEach(n => {

let readStream,

writeStream,

arr = n.split('.'),

oldPath = src + '/' + n,

newPath = dist + '/' + filename + index + '.' + arr[arr.length - 1];

fs.stat(oldPath, (err, stats) => {

if (err) {

console.log(err);

} else if (stats.isFile()) {

readStream = fs.createReadStream(oldPath);

writeStream = fs.createWriteStream(newPath);

readStream.pipe(writeStream);

}

});

index++;

})

}

效果

总结

node提供了很多模块可以帮助我们完成不同需求的功能开发,使javascript不仅仅局限与浏览器中,尝试自己编写一些脚本有助于对这些模块的理解,同时也能提高办公效率。

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_33205138/article/details/112036462。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
DRY原则在软件开发中,DRY(Don't Repeat Yourself)原则是指尽量避免代码重复的原则。在本文的上下文中,作者遵循这一原则编写了一个Node.js脚本,通过自动化的方式批量处理文件重命名任务,替代了手动逐个重命名文件的人力操作,从而减少了重复劳动和潜在错误。
读取流 (ReadStream)在Node.js中,ReadStream是fs模块提供的一个对象,用于异步读取文件内容。它代表了一个可以从数据源(如文件、网络连接等)连续读取数据的流。在文章提到的案例中,作者创建了一个ReadStream实例来读取待重命名的原始文件内容。
写入流 (WriteStream)同样在Node.js fs模块中,WriteStream是一个对象,用于异步写入数据到目标位置,如文件或网络连接。在实现批量重命名的过程中,作者创建了WriteStream实例,将从ReadStream读取的数据传输并写入到新命名的目标文件中。
管道 (pipe)在Node.js编程中,“管道”是一种机制,允许数据流在一个流对象与另一个流对象之间无缝传递,无需开发者手动进行数据读取和写入操作。在本文中,作者使用了“pipe”方法将读取流(ReadStream)与写入流(WriteStream)链接起来,使得原始文件的内容能够自动流入新文件中,从而实现了文件内容的复制及重命名操作。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在了解了如何使用Node.js的fs模块进行批量文件重命名之后,我们还可以进一步探索更多与文件系统操作相关的实战应用和技术动态。近期,Node.js 16.x版本对fs模块进行了多项改进和优化,引入了Promise API,使得异步文件操作更加简洁易用。例如,现在可以使用`fs.promises.readFile()`和`fs.promises.writeFile()`替代传统的回调方式,提升代码可读性和维护性。
另外,针对大型项目或复杂文件系统的管理,一些开源库如"fs-extra"提供了更为丰富的API和更强大的功能支持,比如复制目录、移动文件、删除非空目录等,这些在原生fs模块中可能需要编写更多代码才能实现的功能,在fs-extra中都能轻松调用。
同时,对于持续集成(CI/CD)和自动化部署场景,通过结合Node.js的文件操作能力与其他工具(如Git、Webpack等),能够高效完成资源打包、版本控制以及自动化发布流程中的文件处理任务。
此外,随着Node.js在服务器端应用场景的拓展,如静态网站生成器(如Hugo、Gatsby)、服务端渲染框架(Next.js)等都深度依赖于文件系统的操作,深入学习和掌握Node.js的文件系统API,将有助于开发者更好地应对实际开发需求,提升工作效率。
在安全方面,Node.js文件系统操作也需注意权限管理和异常处理机制,以防止潜在的安全风险,确保数据安全和系统稳定性。因此,理解并遵循最佳实践来执行文件操作是每个Node.js开发者必备技能之一。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
dig domain_name - 使用DNS查询工具获取域名的详细信息。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
RabbitMQ实战中因API版本问题导致消息丢失的排查与修复 03-12 jQuery元素滚动动画库插件-ScrollMagic 02-09 属性级联同步与实体管理:Hibernate实战案例详解 01-27 jQuery超酷3D包装盒封面旋转特效 05-16 ElSteps组件动态改变当前步骤时样式更新滞后问题的Vue.js解决方案 02-22 java中处理异常的方式和语句 01-13 AI助手的工作原理与限制:无法按特定要求撰写的原因及信息处理分析 12-27 代码写的html网红钟表 12-18 简约大气文艺工作者作品展示网站模板 09-21 本次刷新还10个文章未展示,点击 更多查看。
ClickHouse系统重启情境下的数据丢失风险与应对:写入一致性、同步模式及备份恢复策略实践 08-27 jQuery带放大镜的迷你幻灯片插件 08-16 简约手机UI设计公司网站模板下载 04-30 绿色经典响应式主机服务器托管网站模板 04-25 PostgreSQL中应对密码过期警告:安全更改密码的步骤与注意事项 04-17 docker改tag(docker改配置文件) 03-17 [转载]蓝桥 利息计算(Java) 03-11 jquery文字动画特效插件animatext 01-22 大气简洁手机电子产品展示柜台前端模板 01-22 [转载]ubuntu用户和权限介绍 01-10 可爱毛绒玩具网上商城响应式网站模板 01-05
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"