経緯
録音して貯めているラジオ番組のファイル名が長すぎてモヤモヤ。
カッとなったのでパッと見て誰のいつの放送か、わかりやすくするため一括でリネームさせることにしました。
要件
- 録音ファイル名は
_
アンダースコアで区切られている - リネーム後は
[番組名]_日付.拡張子
にしたい - ディレクトリ内の特定の拡張子だけ選択
- 一括でリネーム
- コマンドオプションで下位ディレクトリも指定できるようにしておく
実装
rename.js
const fs = require('fs')
const path = require('path')
const fileList = (dir) => {
const directoryName = path.resolve(process.cwd(), dir) // 渡ってきたコマンドオプションからディレクトリ名をセット
fs.readdir(directoryName, (err, fileList) => {
if (err) {
console.error(err)
return false
}
const targetFileNames = fileList.filter(RegExp.prototype.test, /.*\.m4a$/); // ファイル一覧から、拡張子で抽出 今回は「.m4a」
targetFileNames.forEach((fileTmpName) => {
const tmpName = fileTmpName.split('_') // ファイル名を'_'で分割
const renameDays = tmpName[1].slice(0,-6) // 後ろから6桁分削って日付のみ抽出
const tmpFilename = `${tmpName[0]}_${renameDays}.m4a` // ファイル名
const oldFileName = `${directoryName}/${fileTmpName}` // 古いファイルネームのパス
const newFileName = `${directoryName}/${tmpFilename}` // 新しいファイルネームのパス
// ファイル名の変更
fs.rename(oldFileName, newFileName, (err) => {
if (err) {
console.error(err)
return false
}
console.log(oldFileName + '-->' + newFileName)
})
})
})
}
fileList(process.argv[2]) // コマンドオプションでディレクトリ名を取る
実行
node rename.js . // カレントディレクトリ
node rename.js [dirname] // オプションで下位ディレクトリ名指定
ということで、馴染みの深いNode.jsでファイル名一括変更しました。
現場からは以上です。