拡張子で自動振り分け(bash,zsh)

 mvコマンドを利用して現在のディレクトリにある画像を種類別に分類してそれぞれのディレクトリに格納するようにしてみましょう。とりあえずPNG,JPEG,GIF形式の3種類とします。このうちJPEG画像は拡張子がjpg,jpegの2種類あるものとします。これらの画像ファイルが格納されているのはデスクトップ上にあるtestディレクトリとします。もちろん、他のディレクトリでも構いませんが、その場合は適宜読み替えてください。

 まずは分類する画像ファイルを用意しておきます。が、用意するのは面倒だという人は以下のようにコマンドを入力すればサンプルファイルが作成されます。ただし、以下のコマンドはbash,zshのみです。PowerShellでは動きません。

touch {1..3}.{png,gif,jpg,jpeg}

次に画像を格納するディレクトリを作成しておきます。このディレクトリはデスクトップ上にあるtestディレクトリ内に作成します。

cd ~/Desktop/test
mkdir jpg
mkdir png
mkdir gif

あとはmvコマンドで拡張子ごとに、それぞれのディレクトリに移動させます。

mv *.{jpg,jpeg} jpg/
mv *.gif gif/
mv *.png png/

ちなみに毎回ファイルを分類するたびにこれらのコマンドを入力するのは面倒だという人がいるかもしれません。そのような場合はシェルスクリプトとして作成しておけば便利に使えます。シェルスクリプトに関しては別の機会に説明します。とりあえず、シェルスクリプトを作成し実行する部分までざっと説明します。なお、これはbashをベースにしています。

まず、カレントディレクトリはデスクトップ上にあるtestフォルダにします。もちろん、状況に応じて他のディレクトリでも構いません。cdコマンドでtestディレクトリに移動します。

cd ~/Desktop/test

次に以下のようにコマンドを入力します。

vi classify.sh

(vi/vim)というテキストエディタが起動します。iキーを押して以下のコマンド群を入力します。あらかじめコピーしておいてペーストした方が間違いはないでしょう。

#!/bin/bash
cd ~/Desktop/test
mkdir jpg
mkdir png
mkdir gif
mv *.{jpg,jpeg} jpg/
mv *.gif gif/
mv *.png png/

入力が終わったらescキーを押します。次に:wqの順番にキーを押してリターンキーを押します。

すると元の画面に戻ります。作成したシェルスクリプトに実行権限を追加します。以下のようにコマンドを入力します。

chmod u+x classify.sh

これでできあがりです。実行する場合は以下のように入力します。

./classify.sh

実行すると拡張子に応じてファイルが分類されます。なお、すでにディレクトリがある場合や移動するファイルがない場合はエラーメッセージが表示されます。

エラーメッセージが気になる、そんなの表示しなくてもいいという人は以下のようにコマンドを入力してください。

./classify.sh 2>/dev/null

まあ、エラーメッセージは破棄せずに保存した方がいいような気もしますが。その場合はリダイレクト(>,>>)を使って適当にテキストファイルとして保存すればよいでしょう。

こういう分類する処理はタイマー(UNIXならcron)を使うと便利です。ディレクトリに画像を入れるだけで自動的に分類してくれるからです。が、本当に分類すればうまく整理整頓できるのか?と言うと、そこはあまりうまくいかないこともあります。というか、思ったほどうまくいかないの実情ではないでしょうか。そんな時はfindや全文検索することで目的のファイルを見つける方法があります。が、それはまた別の機会に。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。