未使用の画像ファイルを一括削除するシェルを作成した

目次

当ブログの画像ファイルを格納しているディレクトリに、記事で未使用の画像ファイルが大量にあると思われたので、一括削除するためのシェルプログラムを組んで削除を試みた。

 1#!/bin/bash
 2
 3# 画像ファイル一覧を取得
 4files=`find ikou -type f`
 5
 6# 画像ファイルを1件ずつ取り出しての処理
 7for file in $files;
 8do
 9    # 記事格納ディレクトリ内のファイルに対してgrep実行
10    cont_file=`find ~/xxx/content/post -type f | xargs grep -l $file`
11
12    # grep結果でヒットしなかったら、画像ファイルは未使用なので削除する
13    if [ $? = 0 ]; then
14        echo "$file : 使用中(${cont_file})"
15    else
16        rm $file
17        echo "$file : 未使用のため削除しました" 
18    fi  
19done

10行目では、記事格納ディレクトリ内のすべてのファイルに対して、画像ファイルでgrepしている。
1個でもヒットしたらその戻り値は0となる。ヒットしなかったら戻り値は1となる。

念の為、これを実行する前に削除対象ディレクトリをバックアップした。
実行したところ、本当に大量のファイルが削除されて驚いた。
もちろん削除後に各記事の画像が正常に表示されることを確認した。