MacのFinderでは、同じフォルダ内のファイルであれば「名称変更」機能を使って拡張子を一括で変更できます。しかし、この方法ではサブフォルダ内のファイルは対象にならず、フォルダ階層が深い場合には手作業での変更が必要になります。
そのような場合には、Node.jsを活用すると効率的に処理できます。今回は、Node.jsを使って、指定したディレクトリ以下のすべてのファイルを再帰的に走査し、拡張子を変更する方法を紹介します。
【関連記事】Macで複数のファイルの拡張子を一括変更する方法
Node.jsを使った拡張子の一括変更スクリプト
以下は、指定したフォルダとすべてのファイルを再帰的に走査し、拡張子を変更するスクリプトです。今回は、指定したフォルダ以下の.txt
ファイルをすべて.md
に変更しています。拡張子は任意のものに変更してください。
const fs = require('fs');
const path = require('path');
/**
* 指定ディレクトリ内のファイルを再帰的に走査し、
* 拡張子が ".txt" のファイルを ".md" に変更する
* @param {string} dir 対象ディレクトリのパス
*/
function renameTxtToMd(dir) {
fs.readdir(dir, { withFileTypes: true }, (err, entries) => {
if (err) {
console.error(`ディレクトリの読み込みエラー (${dir}):`, err);
return;
}
entries.forEach(entry => {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
// サブディレクトリなら再帰的に探索
renameTxtToMd(fullPath);
} else if (entry.isFile() && path.extname(entry.name) === '.txt') {
// 拡張子 .txt のファイルを見つけた場合
const newFileName = path.basename(entry.name, '.txt') + '.md';
const newFullPath = path.join(dir, newFileName);
fs.rename(fullPath, newFullPath, err => {
if (err) {
console.error(`リネームエラー: ${fullPath} -> ${newFullPath}`, err);
} else {
console.log(`リネーム成功: ${fullPath} -> ${newFullPath}`);
}
});
}
});
});
}
// コマンドライン引数から対象ディレクトリを指定(指定がない場合はカレントディレクトリ)
const targetDir = process.argv[2] || '.';
renameTxtToMd(targetDir);
スクリプトの実行方法
このスクリプトを実行するには、Node.jsがインストールされている必要があります。まず、ターミナルで以下のコマンドを入力し、node
が利用できるか確認しましょう。
node -v
バージョン番号が表示されれば、Node.jsが正しくインストールされています。もしインストールされていなければ、公式サイト(https://nodejs.org/)から最新版をダウンロードしてください。
次に、スクリプトを任意のディレクトリに保存します。例えば、rename.js
という名前で保存したとしましょう。その後、ターミナルを開き、スクリプトを実行したいディレクトリへ移動し、以下のコマンドを入力します。
node rename.js 対象フォルダのパス
対象フォルダを指定しない場合、スクリプトは現在のディレクトリ内のファイルを処理します。例えば、~/Documents
フォルダ内の.txt
ファイルをすべて.md
に変更したい場合は、次のように実行します。
node rename.js ~/Documents
まとめ
MacのFinderを使ったリネーム機能では、同じフォルダ内のファイルしか変更できず、サブフォルダまでは対象になりません。手作業で複数フォルダの変更をするのが面倒な時は、今回紹介したNode.jsを活用すると、フォルダ構造を維持したまま全ファイルの拡張子を変更できるようになります。特に、大量のファイルの拡張子を変換したい場合などに便利です。
0 件のコメント:
コメントを投稿