0
1

More than 3 years have passed since last update.

Node.jsでファイル一覧取って一括リネームする

Last updated at Posted at 2021-02-11

経緯

録音して貯めているラジオ番組のファイル名が長すぎてモヤモヤ。
カッとなったのでパッと見て誰のいつの放送か、わかりやすくするため一括でリネームさせることにしました。

要件

  • 録音ファイル名は _ アンダースコアで区切られている
  • リネーム後は[番組名]_日付.拡張子 にしたい
  • ディレクトリ内の特定の拡張子だけ選択
  • 一括でリネーム
  • コマンドオプションで下位ディレクトリも指定できるようにしておく

つまりこういうのを
スクリーンショット 2021-02-11 21.56.52.png

こういうことに
スクリーンショット 2021-02-11 21.57.31.png

実装

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でファイル名一括変更しました。
現場からは以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1