ある時、ファイルのバックアップを取るのに
「自動的に日付を追加できないか」
と考えた。
ファイルの先頭に日付が挿入されれば並び替えでもスッキリする。
でもいちいち手打ちするのは面倒くさい。
バックアップフォルダかなんかに放り込んだら自動的にリネームしてくれたら一番良いかも?
そこでパッと浮かんだのは「フォルダアクション」
初めて使って見たけどちょっとクセもあって・・・
そんな感じの備忘録。
1.フォルダアクションで自動的にリネーム(日付を付加)する
まず浮かんだのは「フォルダアクション」でのスクリプト割り当て。
多分 Automator あたりでちゃちゃっとできるでしょ?と思ってやってみた。できた。
まず Automator を起動し、「フォルダアクション」を選択。
左ペインから「Finder項目の名前を変更」を右側へ持ってくる。
コピーを作成するかどうか聞かれるが、特にいらないので今回は「追加しない」
追加されたら
「日付または時刻を追加」を選び、「現在」「名前の前」「区切り記号」などを選んでいく。
書式は下に例が出るので確認できます。
あとは紐づけるフォルダを一番上の「フォルダを選択」から選んであげれば良いはず。
とりあえず好きな名前で保存してっと・・・
楽チンやん
問題発生:リネームが止まらない!どんどん追加し続けてしまう
ここで問題発生。
試しにファイルを放り込んでみるとリネームはしてくれるのですが、
ずっとリネームし続けてしまうのです。
例えばこの画像ファイル「Hawaiian Print.jpg」を放り込むと・・・
「20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_20210515_Hawaiian Print.jpg」
こんな感じに。
際限なく文字列を追加し続けてしまいます。
これはリネームした後に
「お、新しいファイルがある!」→「リネームしなきゃ!」→「お、新しいファイルがある!」→ 以下ループ
という感じなんでしょう。(え〜
解決法:違うフォルダへ移動させる
仕方ないのでその一つ下に新しいフォルダを作成し、リネーム後はそこに移動させることにします。
「Finder項目を移動」を下に付け加え、保存先を選びます。
これで完成。
一度だけ日付が付け加えられ、指定のフォルダに移動されました。
フォルダアクションを外したいときは
フォルダアクションの設定を変更したい時は、
そのフォルダを右クリックし、「フォルダアクション設定」(「サービス」項目の中にある場合も)を選択。
該当するものからチェックのオンオフで切り替えられます。
2.リネームするシェルスクリプトをフォルダアクションに設定する
基本的には前述の通り、Automatorに用意されているもので解決できるのですが、
リネーム後に別フォルダへ移動させるというのがなんか気にいらない。(笑
やっぱりシンプルにフォルダへ放り込んだらリネーム、あとはそのまま保管できたらいいな。
うん、それがいい。
まずは名前をチェックして、
(今回のように)8桁の数字とアンダースコアが先頭に付いて”無い”場合にのみリネームを行う、そんなスクリプトを書く。
それなら繰り返しで追加リネームされることもなく、あるいは予めリネームしたファイルを放り込んでもそのままでいるはず。
それをフォルダアクションとして設定してあげれば一つのフォルダで済むではないか。
ということで少し違った方法でもやってみました。
mvコマンドでリネーム
Macってリネームのコマンド(rename)がないんですね。
ファイルを移動させるコマンド(mv)を使ってリネームを実現するようです。ちょっとびっくり。
Homebrewから rename コマンドをインストールすることもできるようですが、やりません。
今回は「bash」でも動くように「mv」コマンドで書いてみます。
ちなみにですが、
MacOS Catalina(10.15)以降ではデフォルトシェルが「zsh」に変更されているので、
より便利な「zmv」なるコマンドが使えます。
とは言いつつMojaveにもzshは入っているので、
実はシェルの選択でそちらを選べば次項のコードを mv -> zmv にしても動きます。
ただやりたいことはシンプルなのでどちらでもいいかなと。
zmvを使う時の準備
もしzmvを使いたい時は
~/.zhenv に
autoload -Uz zmv
を追記する必要があるようです。
(ファイルがなければ作成)
Automatorからフォルダアクションを設定
Automatorを起動し、「フォルダアクション」を選択したら
左ペインから「シェルスクリプトを実行」を持ってきます。
シェルは
/bin/bash
/bin/zsh
どちらでも。
for f in "$@"; do [[ ${f##*/} =~ ^[0-9]{8}_.*$ ]] || mv "$f" "${f%/*}/$(TZ=UTC-9 date '+%Y%m%d')_${f##*/}" done
と入力し、
上部にある「次の場所に追加されたファイルやフォルダを受け取る」から
アクションを割り当てるフォルダを指定します。
あとは名前をつけて保存。
素人の下手コードですが一応何をやっているのかを説明すると、
受け取ったファイル(複数可)のファイル名を一つずつ取り出し条件に合うかを確認。
先頭が8桁の数字とアンダースコアでなければ、mvコマンドで現在の日付をファイル名の先頭に付け加えます。
まとめ
意外と簡単なような、面倒くさいような、やっぱり面倒くさいような。
まぁ一度設定してしまえばあまり触ることもないでしょうし、これでいいかな。
とりあえず調べて見た感じで rename がコマンドとして無かったこと、
たった今自分でリネームしたものを覚えられず繰り返してしまう、ちょっぴりアホな子iMacちゃんにキレ…萌えたので備忘録として記事にしました。
それでは。
コメント