Sha256: b644f5f94d43db25abf3888b740b4428b7f47b59dc9ecf14c23a964fe9906f77

Contents?: true

Size: 1.47 KB

Versions: 42

Compression:

Stored size: 1.47 KB

Contents

#!/usr/bin/env ruby

$VERBOSE = true

$LOAD_PATH << '../lib'

require 'zip'
require 'find'

module Zip
  module ZipFind
    def self.find(path, zip_file_pattern = /\.zip$/i)
      Find.find(path) do |filename|
        yield(filename)
        next unless zip_file_pattern.match(filename) && File.file?(filename)

        begin
          Zip::File.foreach(filename) do |entry|
            yield(filename + File::SEPARATOR + entry.to_s)
          end
        rescue Errno::EACCES => e
          puts e
        end
      end
    end

    def self.find_file(path, filename_pattern, zip_file_pattern = /\.zip$/i)
      find(path, zip_file_pattern) do |filename|
        yield(filename) if filename_pattern.match(filename)
      end
    end
  end
end

if $PROGRAM_NAME == __FILE__
  module ZipFindConsoleRunner
    PATH_ARG_INDEX = 0
    FILENAME_PATTERN_ARG_INDEX = 1
    ZIPFILE_PATTERN_ARG_INDEX = 2

    def self.run(args)
      check_args(args)
      Zip::ZipFind.find_file(args[PATH_ARG_INDEX],
                             args[FILENAME_PATTERN_ARG_INDEX],
                             args[ZIPFILE_PATTERN_ARG_INDEX]) do |filename|
        report_entry_found filename
      end
    end

    def self.check_args(args)
      return if args.size == 3

      usage
      exit
    end

    def self.usage
      puts "Usage: #{$PROGRAM_NAME} PATH ZIPFILENAME_PATTERN FILNAME_PATTERN"
    end

    def self.report_entry_found(filename)
      puts filename
    end
  end

  ZipFindConsoleRunner.run(ARGV)
end

Version data entries

42 entries across 32 versions & 7 rubygems

Version Path
rubyzip-2.4.1 samples/zipfind.rb
rubyzip-2.4 samples/zipfind.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/rubyzip-2.3.2/samples/zipfind.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/rubyzip-2.3.2/samples/zipfind.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/rubyzip-2.3.2/samples/zipfind.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/rubyzip-2.3.2/samples/zipfind.rb
rubyzip-2.4.rc1 samples/zipfind.rb
tdiary-5.2.4 vendor/bundle/ruby/3.1.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.2.3 vendor/bundle/ruby/3.1.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.2.2 vendor/bundle/ruby/3.1.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.2.1 vendor/bundle/ruby/3.1.0/gems/rubyzip-2.3.2/samples/zipfind.rb
vagrant-unbundled-2.2.19.0 vendor/bundle/ruby/3.0.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.2.0 vendor/bundle/ruby/3.0.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.2.0 vendor/bundle/ruby/2.7.0/gems/rubyzip-2.3.0/samples/zipfind.rb
date_n_time_picker_activeadmin-0.1.2 vendor/bundle/ruby/2.6.0/gems/rubyzip-2.3.2/samples/zipfind.rb
date_n_time_picker_activeadmin-0.1.1 vendor/bundle/ruby/2.6.0/gems/rubyzip-2.3.2/samples/zipfind.rb
vagrant-unbundled-2.2.18.0 vendor/bundle/ruby/3.0.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.1.7 vendor/bundle/ruby/3.0.0/gems/rubyzip-2.3.2/samples/zipfind.rb
tdiary-5.1.7 vendor/bundle/ruby/2.7.0/gems/rubyzip-2.3.0/samples/zipfind.rb
rubyzip-2.3.2 samples/zipfind.rb