LoginSignup
1
2

More than 5 years have passed since last update.

画像などを一覧で見れるようにディレクトリを解体する

Last updated at Posted at 2017-10-16

画像や音楽などを一覧で見たい。見るだけのディレクトリが欲しい

こんな人向け

すでに綺麗に分類されている画像集を持っていると仮定する。例えばわんこの写真集をzipで持ってたとする。
解凍してみたらこのようなディレクトリ構成だった。

わんこ ─ 柴犬       ─ 1.jpg
               ─ 2.jpg
    ─ ヨークシャテリア ─ 1.jpg
    ─ ダルメシアン   ─ 1.jpg
               ─ 2.jpg
               ─ 3.jpg
    ─ 以下わんこが続く...

好きなわんこがいて目的の血統の画像が見たければフォルダ名を参照すればいいが、何でもいいからわんこの画像が見たい状態だったとしたら、この綺麗に整理されたディレクトリ構成はフォルダ移動を繰り返すだけの非常にうっとうしいものとなる。
上記の構成を画像が一覧で見れる形、

わんこ ─ 柴犬_1.jpg
    ─ 柴犬_2.jpg
    ─ ヨークシャテリア_1.jpg
    ─ ダルメシアン_1.jpg
    ─ ダルメシアン_2.jpg
    ─ ダルメシアン_3.jpg
    ─ ...

みたいになるようにすることが目的。

想定環境

画像一覧で見るのが目標なのでGUIのOSであること。WindowsかMac OS系を想定する。
今回はWindowsでcygwinが入ってるとする。unix系のコマンドのほうがわかりやすいので。

準備

テストのためにサンプルを用意。

$ mkdir mv_file_test
$ cd $_
$ mkdir -p hoge_dir/fuga_dir/piyo_dir
$ cd $_
$ touch a.png
$ touch b.png
$ touch c.png
$ cd ~/mv_file_test
$ mkdir -p foo_dir/bar_dir/
$ cd $_
$ touch a.png
$ touch b.png
$ cd ~/mv_file_test
$ mkdir -p foo_dir/baz_dir/
$ cd $_
$ touch a.png
$ touch b.png
$ touch c.png
$ cd ~/mv_file_test

中身を確認する。

$ find .
.
./foo_dir
./foo_dir/bar_dir
./foo_dir/bar_dir/a.png
./foo_dir/bar_dir/b.png
./foo_dir/baz_dir
./foo_dir/baz_dir/a.png
./foo_dir/baz_dir/b.png
./foo_dir/baz_dir/c.png
./hoge_dir
./hoge_dir/fuga_dir
./hoge_dir/fuga_dir/piyo_dir
./hoge_dir/fuga_dir/piyo_dir/a.png
./hoge_dir/fuga_dir/piyo_dir/b.png
./hoge_dir/fuga_dir/piyo_dir/c.png

準備完了。

実装する

方法はいろいろあるが、文字列処理が簡単にかけるスクリプト言語を使う。今回はRubyを使うことにする。

mod_file_name_and_copy.rb
TARGET_DIR="/home/HOME_NAME/mv_file_test/" #HOME_NAMEは適当なのに置き換えてね

IO.popen('find ' + TARGET_DIR) do |io|
  while line = io.gets
    line.chomp!
    next if File.ftype(line) != 'file'
    cp_line = line.sub(TARGET_DIR, '')
    cp_file_name = cp_line.gsub('/', '-')
    system('cp "' + line + '" "' + cp_file_name + '"') #ダブルクオートで囲む理由はファイル名にカッコがあるとcpでこけることがあったため
  end
end

これをコピー先のディレクトリを作ってそこで実行してみる。

$ ruby mod_file_name_and_copy.rb

$ ll
合計 1
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 foo_dir-bar_dir-a.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 foo_dir-bar_dir-b.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 foo_dir-baz_dir-a.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 foo_dir-baz_dir-b.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 foo_dir-baz_dir-c.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 hoge_dir-fuga_dir-piyo_dir-a.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 hoge_dir-fuga_dir-piyo_dir-b.png
-rw-r--r-- 1 hogeco なし   0 10月 16 22:03 hoge_dir-fuga_dir-piyo_dir-c.png
-rw-r--r-- 1 hogeco なし 344 10月 16 22:03 mod_file_name_and_copy.rb

よさそうだ。これでわんこを煩わしい操作なしで眺めることができて幸せになれる。

動機

ゲームのリソースなどをまとめて確認したいときに対象があまりにも細分化されたディレクトリ構成だったので、深い階層を追ってまで見たくなかったため。ジャンルごとに分けるのは大事だがあまりにも細かすぎると逆に管理が大変になるという教訓。

1
2
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
1
2