Skip to content

Instantly share code, notes, and snippets.

@bricker
Last active August 4, 2017 05:21
Show Gist options
  • Save bricker/4696710 to your computer and use it in GitHub Desktop.
Save bricker/4696710 to your computer and use it in GitHub Desktop.
require 'find'
require 'pathname'
##
# Given a directory, loop through all of its files recursively,
# and then search the project for references to each file.
name = "image-references"
app_base = "/Users/bricker/websites/kpcc/SCPRv4"
files_base = "#{app_base}/app/assets/images"
# Which paths to look in, recursively
SEARCH_PATHS = [
"app/assets/javascripts",
"app/assets/stylesheets",
"app/helpers",
"app/presenters",
"app/views"
]
# Which files do we actually want to search through?
def relevant_dir(s)
SEARCH_PATHS.find { |d| s.match d }
end
# Which files should we ignore?
def should_ignore(s)
s.match(/\.DS_Store/) || !s.match(/\./)
end
#----------------------------------
#----------------------------------
# Logger
logger = File.new("#{app_base}/log/#{name}.log", "w+")
# Keep track of which files have references and not
with_references = []
without_references = []
# Loop through the files
Dir.glob("#{files_base}/**/*.*").each do |file_to_find|
file_short_name = file_to_find.gsub(files_base, '')
# Counter of how many times this file is being referenced
references = 0
# Loop through each of the files in this project and look for this file.
# Add the number of matches to references
Find.find(app_base).select { |s| relevant_dir(s) }.reject { |s| should_ignore(s) }.each do |app_file|
file = File.read(app_file)
matches = file.scan Pathname.new(file_to_find).basename.to_s
references += matches.size
end
# Output the results - how many times did this file turn up in the project?
if references == 0
without_references.push file_short_name
logger.puts "**#{file_short_name}: NO REFERENCES**"
else
with_references.push file_short_name
logger.puts "#{file_short_name}: #{references} reference#{'s' unless references == 1}"
end
logger.flush
end
logger.puts ""
logger.puts '####Totals:'
logger.puts "**With References: #{with_references.size}**"
logger.puts "**Without References: #{without_references.size}**"
logger.flush
logger.puts ""
logger.puts '####List'
logger.puts "**With References:**"
logger.puts with_references.inspect
logger.puts ""
logger.puts "**Without References:**"
logger.puts without_references.inspect
logger.flush
/about/bg-hero.png: 2 references
/about/divider-donut.png: 1 reference
**/about/header-donut.png: NO REFERENCES**
/about/hero-header.png: 1 reference
/about/ico-directions.png: 1 reference
/about/ico-directory.png: 1 reference
/about/ico-errors.png: 1 reference
/about/ico-phone.png: 1 reference
/about/ico-source.png: 1 reference
/about/ico-tips.png: 1 reference
/about/img-careers.jpg: 1 reference
/about/img-governance.jpg: 1 reference
/about/img-mission.jpg: 1 reference
/about/img-more.jpg: 1 reference
/about/img-transparency.jpg: 1 reference
/about/intelligent-talk.png: 1 reference
/about/menu-hero-bg.png: 2 references
**/arrow-left.gif: NO REFERENCES**
**/arrow-right.gif: NO REFERENCES**
/audio-close.png: 1 reference
/audio-controls.png: 2 references
/blogs/latest_lg.png: 1 reference
/blogs/latest_sm.png: 1 reference
/blogs/multiamerican_lg.png: 1 reference
/blogs/multiamerican_sm.png: 1 reference
/blogs/passfail_lg.png: 1 reference
/blogs/passfail_sm.png: 1 reference
/blogs/pattmorrison_lg.png: 1 reference
/blogs/pattmorrison_sm.png: 1 reference
/blogs/represent_lg.png: 1 reference
/blogs/represent_sm.png: 1 reference
/blogs/withoutanet_lg.png: 1 reference
/blogs/withoutanet_sm.png: 1 reference
**/breaking-news/antioch-ad-election.jpg: NO REFERENCES**
**/breaking-news/bg-email-left.png: NO REFERENCES**
**/breaking-news/bg-email-right.png: NO REFERENCES**
/breaking-news/bg.gif: 1 reference
/breaking-news/breaker.jpg: 3 references
**/breaking-news/breaking.png: NO REFERENCES**
**/breaking-news/btn-read-more.png: NO REFERENCES**
**/breaking-news/spacer.gif: NO REFERENCES**
**/broadcast-bar/brand-martinez-sm.png: NO REFERENCES**
**/broadcast-bar/comment-icon.png: NO REFERENCES**
/broadcast-bar/episode-arrow-invitation.png: 2 references
/broadcast-bar/episode-modal-arrow-up.png: 1 reference
/broadcast-bar/episode-modal-close-btn.png: 2 references
/broadcast-bar/episode-more-icon.png: 1 reference
/broadcast-bar/headshots/airtalk.png: 1 reference
/broadcast-bar/headshots/brand-martinez.png: 1 reference
**/broadcast-bar/headshots/filmweek.png: NO REFERENCES**
**/broadcast-bar/headshots/madeleine-brand.png: NO REFERENCES**
/broadcast-bar/headshots/offramp.png: 1 reference
**/broadcast-bar/headshots/patt-morrison.png: NO REFERENCES**
/broadcast-bar/headshots/taketwo.png: 1 reference
/broadcast-bar/john-offramp-sm.png: 1 reference
/broadcast-bar/larry-airtalk-sm.png: 1 reference
**/broadcast-bar/madeleine-brand-sm.png: NO REFERENCES**
/broadcast-bar/onair.png: 1 reference
**/broadcast-bar/patt-morrison-sm.png: NO REFERENCES**
/broadcast-bar/taketwo-sm.png: 1 reference
/broadcast-bar/upnext.png: 1 reference
/browse-all-default.png: 1 reference
/bullet-dark.png: 1 reference
/bullet-light.png: 1 reference
/cff-building.png: 1 reference
/divider-vert.png: 1 reference
/event-headers/cff-logo.png: 2 references
/event-headers/hero-1.jpg: 1 reference
/event-headers/hero-2.jpg: 1 reference
/event-headers/hero-3.jpg: 1 reference
/event-headers/hero-4.jpg: 1 reference
**/events-forum-calendar-icon.png: NO REFERENCES**
**/events-forum-thumb-1.jpg: NO REFERENCES**
**/events-forum-thumb-2.jpg: NO REFERENCES**
**/facebook/CFF-twitter.png: NO REFERENCES**
/facebook/facebook-icon.png: 1 reference
/facebook/facebook-like.png: 1 reference
**/facebook/facebook_icon.gif: NO REFERENCES**
/facebook/twitter-icon.png: 1 reference
/facebook/twitter-peek.png: 1 reference
**/fallback-img-rect.png: NO REFERENCES**
**/fallback-img-square.png: NO REFERENCES**
/fallback-img.png: 2 references
/floating-shadow.png: 1 reference
/footer-arrow-dark.png: 1 reference
/footer-arrow.png: 1 reference
/footer-divider-bg.png: 1 reference
/footer-mobileapps.png: 1 reference
/footer-partners.png: 1 reference
**/gray_texture_bg.png: NO REFERENCES**
**/homepage/riots-divider.png: NO REFERENCES**
**/homepage/riots-header.png: NO REFERENCES**
**/icons/android.png: NO REFERENCES**
/icons/antenna-dark.png: 1 reference
/icons/antenna-footer.png: 1 reference
/icons/antenna.png: 2 references
/icons/archived.png: 1 reference
**/icons/arrow-left.png: NO REFERENCES**
**/icons/arrow-right.png: NO REFERENCES**
**/icons/blog-header-icon.png: NO REFERENCES**
/icons/bullet-donut.png: 2 references
/icons/calendar-icon-black.png: 1 reference
/icons/calendar-icon-orange.png: 1 reference
/icons/calendar-icon.png: 1 reference
/icons/carousel-btns.png: 1 reference
**/icons/chemical.png: NO REFERENCES**
**/icons/cogs.png: NO REFERENCES**
/icons/comment-count-sm.png: 1 reference
/icons/comment-count.png: 2 references
**/icons/comment.png: NO REFERENCES**
/icons/dark-modal-arrow.png: 1 reference
/icons/envelope-open.png: 1 reference
/icons/facebook.png: 3 references
/icons/filter-arrow.png: 1 reference
/icons/footer-socialmedia.png: 1 reference
/icons/forum-directions.png: 1 reference
/icons/forum-partnerships.png: 1 reference
/icons/link-offsite.png: 1 reference
/icons/listen-headphones.png: 1 reference
/icons/menu-about-connect.png: 1 reference
/icons/menu-about-kpcc.png: 1 reference
/icons/menu-about-people.png: 1 reference
/icons/menu-icon.png: 1 reference
/icons/menu-support-leadership.png: 1 reference
/icons/menu-support-members.png: 1 reference
/icons/menu-support-moreways.png: 1 reference
/icons/menu-support-partnerships.png: 1 reference
**/icons/nav-arrow.png: NO REFERENCES**
**/icons/nav-btn.png: NO REFERENCES**
/icons/newsletter-subscribe.png: 1 reference
/icons/pij-query.png: 2 references
/icons/pledge-heart-large.png: 1 reference
/icons/pledge-heart.png: 1 reference
/icons/search-btn.png: 2 references
/icons/search-close.png: 1 reference
/icons/share-email.png: 1 reference
/icons/share-facebook.png: 1 reference
/icons/share-plus.png: 1 reference
/icons/share-print.png: 1 reference
/icons/share-twitter.png: 2 references
/icons/tiny-facebook.png: 1 reference
/icons/tiny-listen.png: 1 reference
/icons/tiny-podcast.png: 1 reference
/icons/tiny-quotes.png: 1 reference
/icons/tiny-rss.png: 1 reference
/icons/tiny-twitter.png: 1 reference
/icons/twitter.png: 5 references
/icons/video-play-btn-sm.png: 1 reference
/icons/video-play-btn-tiny.png: 1 reference
/icons/videos.png: 1 reference
**/icons-s9d8d73c819.png: NO REFERENCES**
/join-conversation-blockquote.png: 1 reference
**/kpcc-logo-sm.png: NO REFERENCES**
/kpcc-twitter-logo.png: 4 references
/logo-footer.png: 1 reference
/logo-full-sm.png: 1 reference
/logo-mark-sm.png: 1 reference
/logo-masthead-dark.png: 3 references
**/logo-masthead-notagline.png: NO REFERENCES**
/logo-masthead-video.png: 1 reference
/logo-masthead.png: 2 references
/media-players/story-audio-play.png: 1 reference
**/mega-divider-dark.png: NO REFERENCES**
/mega-divider.png: 2 references
**/mobile/ad-bg.jpg: NO REFERENCES**
/more-headlines-li.png: 2 references
/more-news-quotee-icon.png: 1 reference
**/more-news-segment-thumb-1.jpg: NO REFERENCES**
**/more-news-thumb-1.jpg: NO REFERENCES**
**/more-news-video-thumb-1.jpg: NO REFERENCES**
/overlay-next-dark-sm.png: 2 references
/overlay-next-dark.png: 1 reference
/overlay-next.png: 1 reference
/overlay-prev-dark-sm.png: 2 references
/overlay-prev-dark.png: 1 reference
/overlay-prev.png: 1 reference
**/personalities/cohen.png: NO REFERENCES**
/personalities/guzman-lopez.png: 1 reference
/personalities/julian.png: 1 reference
**/personalities/la2london-small.jpg: NO REFERENCES**
/personalities/moore.png: 1 reference
/personalities/oneil.png: 1 reference
/personalities/peterson.png: 1 reference
/personalities/romo.png: 1 reference
/personalities/stoltze.png: 1 reference
**/personalities/trujillo.png: NO REFERENCES**
/personalities/watt.png: 1 reference
/pledge-btn.png: 1 reference
**/pledge-container-bg.gif: NO REFERENCES**
/pledge-container-bg.jpg: 1 reference
/section-headline-background.png: 1 reference
/specials/election/bg-header.jpg: 1 reference
/specials/election/bg-subhead.png: 1 reference
/specials/election/head-berman.png: 1 reference
/specials/election/head-jackson.png: 1 reference
/specials/election/head-lacey.png: 1 reference
/specials/election/head-obama.png: 1 reference
/specials/election/head-romney.png: 1 reference
/specials/election/head-sherman.png: 1 reference
/specials/election/ico-checkbox-sm.png: 1 reference
/specials/election/ico-checkbox.png: 1 reference
**/specials/election/ico-prev-next-pale.png: NO REFERENCES**
**/specials/election/ico-prev-next.png: NO REFERENCES**
/specials/election/ico-share.png: 1 reference
/specials/election/ico-strikethrough-sm.png: 1 reference
/specials/election/ico-twitter.png: 1 reference
/specials/pledge/bg-pledge-pushdown.png: 2 references
/specials/pledge/bg-thermometer-color.png: 1 reference
/specials/pledge/bg-thermometer-lines.png: 1 reference
/specials/pledge/bg-thermometer-overlay.png: 1 reference
/specials/pledge/btn-close.png: 2 references
/specials/pledge/btn-contribute.png: 1 reference
/specials/pledge/ico-locked.png: 1 reference
/specials/pledge/ico-unlocked.png: 1 reference
/specials/pledge/tab-counter.png: 1 reference
/support-banner.png: 1 reference
/support-forum.png: 1 reference
**/support-voices-trust.png: NO REFERENCES**
/thumbnails-btn.png: 1 reference
**/transparent-pixel.gif: NO REFERENCES**
**/video-masthead.png: NO REFERENCES**
####Totals:
**With References: 169**
**Without References: 52**
####List
**With References:**
["/about/bg-hero.png", "/about/divider-donut.png", "/about/hero-header.png", "/about/ico-directions.png", "/about/ico-directory.png", "/about/ico-errors.png", "/about/ico-phone.png", "/about/ico-source.png", "/about/ico-tips.png", "/about/img-careers.jpg", "/about/img-governance.jpg", "/about/img-mission.jpg", "/about/img-more.jpg", "/about/img-transparency.jpg", "/about/intelligent-talk.png", "/about/menu-hero-bg.png", "/audio-close.png", "/audio-controls.png", "/blogs/latest_lg.png", "/blogs/latest_sm.png", "/blogs/multiamerican_lg.png", "/blogs/multiamerican_sm.png", "/blogs/passfail_lg.png", "/blogs/passfail_sm.png", "/blogs/pattmorrison_lg.png", "/blogs/pattmorrison_sm.png", "/blogs/represent_lg.png", "/blogs/represent_sm.png", "/blogs/withoutanet_lg.png", "/blogs/withoutanet_sm.png", "/breaking-news/bg.gif", "/breaking-news/breaker.jpg", "/broadcast-bar/episode-arrow-invitation.png", "/broadcast-bar/episode-modal-arrow-up.png", "/broadcast-bar/episode-modal-close-btn.png", "/broadcast-bar/episode-more-icon.png", "/broadcast-bar/headshots/airtalk.png", "/broadcast-bar/headshots/brand-martinez.png", "/broadcast-bar/headshots/offramp.png", "/broadcast-bar/headshots/taketwo.png", "/broadcast-bar/john-offramp-sm.png", "/broadcast-bar/larry-airtalk-sm.png", "/broadcast-bar/onair.png", "/broadcast-bar/taketwo-sm.png", "/broadcast-bar/upnext.png", "/browse-all-default.png", "/bullet-dark.png", "/bullet-light.png", "/cff-building.png", "/divider-vert.png", "/event-headers/cff-logo.png", "/event-headers/hero-1.jpg", "/event-headers/hero-2.jpg", "/event-headers/hero-3.jpg", "/event-headers/hero-4.jpg", "/facebook/facebook-icon.png", "/facebook/facebook-like.png", "/facebook/twitter-icon.png", "/facebook/twitter-peek.png", "/fallback-img.png", "/floating-shadow.png", "/footer-arrow-dark.png", "/footer-arrow.png", "/footer-divider-bg.png", "/footer-mobileapps.png", "/footer-partners.png", "/icons/antenna-dark.png", "/icons/antenna-footer.png", "/icons/antenna.png", "/icons/archived.png", "/icons/bullet-donut.png", "/icons/calendar-icon-black.png", "/icons/calendar-icon-orange.png", "/icons/calendar-icon.png", "/icons/carousel-btns.png", "/icons/comment-count-sm.png", "/icons/comment-count.png", "/icons/dark-modal-arrow.png", "/icons/envelope-open.png", "/icons/facebook.png", "/icons/filter-arrow.png", "/icons/footer-socialmedia.png", "/icons/forum-directions.png", "/icons/forum-partnerships.png", "/icons/link-offsite.png", "/icons/listen-headphones.png", "/icons/menu-about-connect.png", "/icons/menu-about-kpcc.png", "/icons/menu-about-people.png", "/icons/menu-icon.png", "/icons/menu-support-leadership.png", "/icons/menu-support-members.png", "/icons/menu-support-moreways.png", "/icons/menu-support-partnerships.png", "/icons/newsletter-subscribe.png", "/icons/pij-query.png", "/icons/pledge-heart-large.png", "/icons/pledge-heart.png", "/icons/search-btn.png", "/icons/search-close.png", "/icons/share-email.png", "/icons/share-facebook.png", "/icons/share-plus.png", "/icons/share-print.png", "/icons/share-twitter.png", "/icons/tiny-facebook.png", "/icons/tiny-listen.png", "/icons/tiny-podcast.png", "/icons/tiny-quotes.png", "/icons/tiny-rss.png", "/icons/tiny-twitter.png", "/icons/twitter.png", "/icons/video-play-btn-sm.png", "/icons/video-play-btn-tiny.png", "/icons/videos.png", "/join-conversation-blockquote.png", "/kpcc-twitter-logo.png", "/logo-footer.png", "/logo-full-sm.png", "/logo-mark-sm.png", "/logo-masthead-dark.png", "/logo-masthead-video.png", "/logo-masthead.png", "/media-players/story-audio-play.png", "/mega-divider.png", "/more-headlines-li.png", "/more-news-quotee-icon.png", "/overlay-next-dark-sm.png", "/overlay-next-dark.png", "/overlay-next.png", "/overlay-prev-dark-sm.png", "/overlay-prev-dark.png", "/overlay-prev.png", "/personalities/guzman-lopez.png", "/personalities/julian.png", "/personalities/moore.png", "/personalities/oneil.png", "/personalities/peterson.png", "/personalities/romo.png", "/personalities/stoltze.png", "/personalities/watt.png", "/pledge-btn.png", "/pledge-container-bg.jpg", "/section-headline-background.png", "/specials/election/bg-header.jpg", "/specials/election/bg-subhead.png", "/specials/election/head-berman.png", "/specials/election/head-jackson.png", "/specials/election/head-lacey.png", "/specials/election/head-obama.png", "/specials/election/head-romney.png", "/specials/election/head-sherman.png", "/specials/election/ico-checkbox-sm.png", "/specials/election/ico-checkbox.png", "/specials/election/ico-share.png", "/specials/election/ico-strikethrough-sm.png", "/specials/election/ico-twitter.png", "/specials/pledge/bg-pledge-pushdown.png", "/specials/pledge/bg-thermometer-color.png", "/specials/pledge/bg-thermometer-lines.png", "/specials/pledge/bg-thermometer-overlay.png", "/specials/pledge/btn-close.png", "/specials/pledge/btn-contribute.png", "/specials/pledge/ico-locked.png", "/specials/pledge/ico-unlocked.png", "/specials/pledge/tab-counter.png", "/support-banner.png", "/support-forum.png", "/thumbnails-btn.png"]
**Without References:**
["/about/header-donut.png", "/arrow-left.gif", "/arrow-right.gif", "/breaking-news/antioch-ad-election.jpg", "/breaking-news/bg-email-left.png", "/breaking-news/bg-email-right.png", "/breaking-news/breaking.png", "/breaking-news/btn-read-more.png", "/breaking-news/spacer.gif", "/broadcast-bar/brand-martinez-sm.png", "/broadcast-bar/comment-icon.png", "/broadcast-bar/headshots/filmweek.png", "/broadcast-bar/headshots/madeleine-brand.png", "/broadcast-bar/headshots/patt-morrison.png", "/broadcast-bar/madeleine-brand-sm.png", "/broadcast-bar/patt-morrison-sm.png", "/events-forum-calendar-icon.png", "/events-forum-thumb-1.jpg", "/events-forum-thumb-2.jpg", "/facebook/CFF-twitter.png", "/facebook/facebook_icon.gif", "/fallback-img-rect.png", "/fallback-img-square.png", "/gray_texture_bg.png", "/homepage/riots-divider.png", "/homepage/riots-header.png", "/icons/android.png", "/icons/arrow-left.png", "/icons/arrow-right.png", "/icons/blog-header-icon.png", "/icons/chemical.png", "/icons/cogs.png", "/icons/comment.png", "/icons/nav-arrow.png", "/icons/nav-btn.png", "/icons-s9d8d73c819.png", "/kpcc-logo-sm.png", "/logo-masthead-notagline.png", "/mega-divider-dark.png", "/mobile/ad-bg.jpg", "/more-news-segment-thumb-1.jpg", "/more-news-thumb-1.jpg", "/more-news-video-thumb-1.jpg", "/personalities/cohen.png", "/personalities/la2london-small.jpg", "/personalities/trujillo.png", "/pledge-container-bg.gif", "/specials/election/ico-prev-next-pale.png", "/specials/election/ico-prev-next.png", "/support-voices-trust.png", "/transparent-pixel.gif", "/video-masthead.png"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment