27
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CSVから一括でファイル名を変更するMacアプリを作った

Last updated at Posted at 2020-12-02

シェルスクリプトをMacアプリにできるAutomatorが凄かった!!

アプリのダウンロードはこちら

ことのはじまり

デザイン部の社員から「約600個の画像の名前を一括で変更したい。変更前と変更後のファイル名はExcelシートにまとまっている」と相談された。

そのスプレッドシートを見せてもらうと、以下のような感じ。

スクリーンショット 2020-11-30 20.12.37.png

ちなみに今までは全部人力で名前変更していたらしい。そ れ は ヤ バ イ

その社員はMacだったので、mvコマンドをスプレッドシートで生成し、それをコピペしてターミナルに貼ってもらう方法を提案した。

スクリーンショット 2020-11-30 20.11.38.png

【参考】Macでファイル名変更リストを作成して、ターミナルから大量ファイルを一発でリネームする方法!

このやり方をレクチャーし、とても喜んでもらえた。私は満足して退勤し、気分良く寝ようとした。が、

......

寝られないのである。

なんだろう、このモヤモヤする気持ちは......

エンジニアでない人にターミナルを起動させるのは、負けではないか。

というわけでMacアプリを作る

1. Bashを書く

まずはささっとBashを書く。

引数は2つ。CSVファイルのパスと対象ディレクトリのパス。

返り値はリネーム後のファイルが入ったディレクトリのパス。

やりたいことは「リネーム」だが、実際にはcpコマンドでコピーして元ファイルを残すようにした。

cp-based-on-csv.sh

CSV_FILE=$1
FILE_DIR=$2
NEW_FILE_DIR=${FILE_DIR}_$(date +"%Y%m%d_%H%M%S")
mkdir $NEW_FILE_DIR
for row in $(cat $CSV_FILE)
do
  col1=$(echo "$row" | cut -d ',' -f 1)
  col2=$(echo "$row" | cut -d ',' -f 2)
  cp "${FILE_DIR}/${col1}" "${NEW_FILE_DIR}/${col2}"
done
echo "$NEW_FILE_DIR"

2. AutomatorでMacアプリにする

Automatorを起動

Automatorの起動

新規作成の画面で「アプリケーション」を選ぶ

アプリケーションを選ぶ

以下ではこの画面でビジュアルプログラミングしていく

Automatorのメイン画面

まずは「ファイルを開く」ダイアログを2つ用意し、

Finder項目の選択を求める

その2つを引数にシェルスクリプトを実行させ、

bashを実行する

結果をFinderで表示する。

Finderで表示する

まとめると以下の通り。

完成形.png

さらに確認画面をいくつか追加した。キャンセルを押せばアプリを途中で終了できるので便利。

確認画面を出す

Appとして書き出せば...

書き出す1
書き出す2

完成!

動作確認をする。作成したアプリをクリックしたら、

自作アプリの起動

まずはCSVの選択画面が出て、

CSVの選択画面

次にフォルダの選択画面が出て、

フォルダの選択画面

リネーム後のファイルが表示される。完璧!

リネーム後のファイルの表示

誰でもかんたんにMacアプリが作れるAutomator、素晴らしすぎる。

おしまい

今度こそとても感謝してもらえた😊

GitHubリポジトリはこちら

27
6
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
27
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?