Macのターミナルで繰り返し行う作業ってありますよね。 そんな時、自分専用のコマンドを作って登録しておくと作業効率が格段に上がる。

今回はファイル名を一括変換するコマンドを例に、 自作コマンドの作り方から PATH 設定までを解説します。

自作コマンドを作るメリット

  • 作業効率の向上: 長いコマンドを短縮できる
  • ミス防止: よく使う処理を定型化できる
  • カスタマイズ性: 自分の使い方に最適化できる
  • 再利用性: 一度作れば他のマシンでも使える

今回作るコマンド:ファイル名一括変換

ここでは「amv」(all mv の意)というコマンド名で、 複数のファイル名を一括で「固定文字列_連番.拡張子」の形式に変換するコマンドを作ってみます。

例えば、バラバラの名前の画像ファイルを vacation_001.jpgvacation_002.jpg... と整理できる。

自作コマンドの作り方(基本の流れ)

1. コマンド用のディレクトリを作成

まず、自作コマンドを保存するディレクトリを作る。

~/MyCommands/
  └── amv/
      ├── amv        # シェルスクリプト(エントリーポイント)
      └── amv.py     # Python本体

~/MyCommands/ 以下に、コマンドごとにディレクトリを作る構成。 コマンド名は好きな名前でOK。

2. シェルスクリプト(エントリーポイント)を作成

~/MyCommands/amv/amv ファイルを作成(拡張子なし)。

#!/bin/zsh

python3 $(cd $(dirname $0); pwd)/amv.py

このスクリプトは Python ファイルを呼び出す役割。 $(cd $(dirname $0); pwd) で、スクリプト自身のディレクトリを取得してる。

3. Python 本体を作成

~/MyCommands/amv/amv.py に実際の処理を書く。

import glob
import os

def getPattern():
	return input("[入力]変更するファイル群を指定するパターン: ")

def getFiles(pattern):
	files = [p for p in glob.glob(pattern) if os.path.isfile(p)]
	files.sort()
	if files:
		print("変更対象のファイル:")
		for file in files:
			print("- " + file)
		print("上記のファイル群を {固定文字列}_{連番}.{拡張子} の形式で一括変換します")
		print()
	else:
		print("パターンに合致するファイルがありません")
		print("ワイルドカード(*)のみ使用できます")
		exit()
	return files

def getFixed():
	return input("[入力]ファイル名の固定文字列:")

def renameFiles(files, fixed):
	print()
	for i in range(len(files)):
		extension = files[i].split(".")[-1]
		after = f"{fixed}_{i+1:03}.{extension}"
		os.rename(files[i], after)
		print(f"{files[i]}  ->  {after}")

def main():
	pattern = getPattern()
	files = getFiles(pattern)
	fixed = getFixed()
	renameFiles(files, fixed)

if __name__ == "__main__":
	main()

この Python スクリプトは以下の流れで動作:

  • ワイルドカードでファイルを選択
  • 固定文字列を入力
  • 連番付きでリネーム

4. 実行権限を付与

シェルスクリプトに実行権限を与える。

chmod +x ~/MyCommands/amv/amv

PATH 設定で、どこからでも実行可能に

作成したコマンドをどこからでも実行できるように、~/.zshrc に PATH を追加する。

~/.zshrc に追記

# 自作コマンドのPATH設定
export PATH=$HOME/MyCommands/amv:$PATH

設定を反映させるため、ターミナルを再起動するか以下を実行。

source ~/.zshrc

これで amv コマンドがどのディレクトリからでも実行できるようになる。

使い方

実際に使ってみる。

$ cd ~/Downloads
$ ls
photo1.jpg  photo2.jpg  photo3.jpg  IMG_001.jpg  IMG_002.jpg

$ amv
[入力]変更するファイル群を指定するパターン: *.jpg
変更対象のファイル:
- IMG_001.jpg
- IMG_002.jpg
- photo1.jpg
- photo2.jpg
- photo3.jpg
上記のファイル群を {固定文字列}_{連番}.{拡張子} の形式で一括変換します

[入力]ファイル名の固定文字列:vacation

IMG_001.jpg  ->  vacation_001.jpg
IMG_002.jpg  ->  vacation_002.jpg
photo1.jpg  ->  vacation_003.jpg
photo2.jpg  ->  vacation_004.jpg
photo3.jpg  ->  vacation_005.jpg

ワイルドカード(*.jpg)で対象ファイルを指定して、 固定文字列を入力すると自動的に連番付きでリネームされる。

応用:他のコマンドを作る

この構成を応用すれば、さまざまな自作コマンドを作れる。

  • よく使うコマンドのメモ表示(単純な cat コマンド)
  • 定型作業の自動化(ファイル移動、バックアップなど)
  • API 連携(外部サービスへの投稿など)

Python 以外にも、シェルスクリプトだけ、Ruby、Node.js など好きな言語で作成できる。

まとめ

自作コマンドを作ることで日々の作業が効率化されて、ターミナル操作がより快適になる。

一度覚えてしまえばいろいろな場面で応用できるので、ぜひ試してみてください。