9

I'm familiar with tools like Deadweight for finding CSS not in use in your Rails app, but does anything exist for images? I'm sitting in a project with a massive directory of assets from working with a variety of designers and I'm trying to trim the fat in this project. It's especially a pain when moving assets to our CDN.

Any thoughts?

4

4 に答える 4

13

画像を使用したコードに大きく依存します。ファイル名が (2 つの値の連結や文字列置換などによって) 計算される可能性は常にあるため、ファイル名による単純な grep では必ずしも十分ではありません。

wget (Linux マシンを使用している場合は既にインストールされている可能性があります。それ以外の場合はhttp://users.ugent.be/~bpuype/wget/ ) を実行して、サイト全体をミラーリングしてみてください。可能であれば、同じマシンまたはネットワークでこれを行うと、サイト全体がクロールされ、すべての画像が取得されます

# mirror mysite.com accepting only jpg, png and gif files
wget -A jpg,png,gif --mirror www.mysite.com

これが完了すると、サイトのクロールによって到達可能なページからアクティブにリンクされている画像を含む、サイトの階層の 2 番目のコピーが作成されます。その後、ソース イメージ ディレクトリをバックアップし、wget のコピーに置き換えることができます。次に、gif/jpg/png ファイルに関連する 404 のログ ファイルを監視します。それが役立つことを願っています。

于 2010-01-06T02:32:59.167 に答える
11

unsed 画像の検索は、CSS よりも簡単です。

*.jpg *.png *gif を glob で検索し、それらのファイル名を辞書または配列に配置し、それらのファイル名を html、css、js ファイルに対して検索し、見つかった場合はファイル名を削除すると、未使用のリストが取得され、それらの画像が別のフォルダーに移動されます。同じディレクトリ構造 (万が一の復元に便利)

基本的にはこのように、もちろん暗号化/エンコード/難読化されたファイル名は機能しません。

require "fileutils"

img=Dir.glob("**/*.jpg")+Dir.glob("**/*.png")+Dir.glob("**/*.gif")
data=Dir.glob("**/*.htm*")+Dir.glob("**/*.css")+Dir.glob("**/*.js")

puts img.length.to_s+" images found & "+data.length.to_s+" files found to search against"

content=""
data.each do |f|
    content+=File.open(f, 'r').read   
end

img.each do |m|
    if not content=~ Regexp.new("\\b"+File.basename(m)+"\\b")
        FileUtils.mkdir_p "../unused/"+File.dirname(m)
        FileUtils.mv m,"../unused/"+m
        puts "Image "+m+" moved to ../unused/"+File.dirname(m)+" folder"
    end
end

PS: を使用しました。なぜなら、私の Windows バージョンの Ruby ではfileutils正常makedirsで動作しないからです。mv

また、私はルビーが苦手なので、使用する前に再確認してください。

これは、Windows のサンプル Rails フォルダーのルート フォルダーで実行したサンプル結果です。

---\ruby>ruby img_coverage.rb
5 images found & 12 files found to search against
Image depot/public/images/test.jpg moved to ../unused/depot/public/images folder
于 2010-01-06T02:03:29.570 に答える
6

画像の URL が、多くの計算された文字列や連結された文字列、およびソース コード内のプログラムで追跡するのが難しいその他のものに由来することが多く、アプリケーションが頻繁に使用されている場合は、次のようなソフトな「ハニーポット」アプローチを試すことができます。

  • すべてのアセットを別のディレクトリに移動します。たとえば、/attic
  • 空の/imagesディレクトリ (またはアセット ディレクトリの名前) を設定します。
  • フラグを使用して、存在しない画像ファイルへのすべての要求をスクリプトにリダイレクトするファイルを設定し.htaccessます (もちろん Apache を使用している場合)。-f
  • スクリプトは、要求されたファイルを からディレクトリにコピーし/attic、表示/imagesします。
  • そのイメージへの次のリクエストは、イメージに直接送信されます。これは、現在存在するためです。

しばらくして十分に使用すると、必要なすべての画像が assets ディレクトリにコピーされます。

もちろん、これは「ソフト」なアプローチです。これは、ダイアログ/シチュエーションがその間にユーザーによって開かれた/入力された/使用されなかった可能性があるためです (たとえば、エラーメッセージアイコンなど)。しかし、どこから要求されたとしても、使用されているすべてのファイルを認識し、不要なファイルの多くを整理するのに役立つ可能性があります。

于 2010-01-06T22:39:19.167 に答える
2

ファイル マネージャーがサポートしている場合は、画像ディレクトリをファイルの「最終アクセス」日付で並べ替えてみてください。長い間アクセスされていないファイルは、おそらくもう使用されていません。

同じように、Web サーバーのログをフィルター処理または grep して、過去数か月に提供された画像ファイルのリストを作成することもできます。このリストにない画像は、未使用の可能性があります。

于 2010-01-06T22:28:37.940 に答える