# File lib/nanoc/extra/pruner.rb, line 26
    def run
      require 'find'

      # Get compiled files
      compiled_files = self.site.items.map do |item|
        item.reps.map do |rep|
          rep.raw_path
        end
      end.flatten.compact.select { |f| File.file?(f) }

      # Get present files and dirs
      present_files_and_dirs = Set.new
      Find.find(self.site.config[:output_dir]) do |f|
        present_files_and_dirs << f
      end
      present_files = present_files_and_dirs.select { |f| File.file?(f) }
      present_dirs  = present_files_and_dirs.select { |f| File.directory?(f) }

      # Remove stray files
      stray_files = (present_files - compiled_files)
      stray_files.each do |f|
        next if filename_excluded?(f)
        self.delete_file(f)
      end

      # Remove empty directories
      present_dirs.sort_by{ |d| -d.length }.each do |dir|
        next if Dir.foreach(dir) { |n| break true if n !~ /\A\.\.?\z/ }
        next if filename_excluded?(dir)
        self.delete_dir(dir)
      end
    end