在一个实际需求中,需要对一批文件(如:文本、图片)进行重命名,按照数字编号。正好借此熟悉了一下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 |