rubyzip/samples/zipfind.rb

69 lines
1.5 KiB
Ruby
Raw Normal View History

2002-09-15 04:59:29 +08:00
#!/usr/bin/env ruby
# frozen_string_literal: true
2002-09-15 04:59:29 +08:00
$VERBOSE = true
2019-09-27 04:46:00 +08:00
$LOAD_PATH << '../lib'
2002-09-15 04:59:29 +08:00
2014-03-31 19:20:27 +08:00
require 'zip'
2002-09-15 04:59:29 +08:00
require 'find'
2002-09-15 23:16:39 +08:00
module Zip
module ZipFind
def self.find(path, zip_file_pattern = /\.zip$/i)
2020-02-18 06:35:08 +08:00
Find.find(path) do |filename|
yield(filename)
next unless zip_file_pattern.match(filename) && File.file?(filename)
2015-03-24 00:27:20 +08:00
begin
2020-02-18 06:35:08 +08:00
Zip::File.foreach(filename) do |entry|
yield(filename + File::SEPARATOR + entry.to_s)
2015-03-21 16:10:37 +08:00
end
rescue Errno::EACCES => e
puts e
2015-03-21 16:10:37 +08:00
end
end
2002-09-15 23:16:39 +08:00
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)
2015-03-21 16:10:37 +08:00
end
2002-09-15 23:16:39 +08:00
end
2002-09-15 04:59:29 +08:00
end
end
2019-09-27 04:46:00 +08:00
if $PROGRAM_NAME == __FILE__
2002-09-15 23:16:39 +08:00
module ZipFindConsoleRunner
2015-03-23 01:10:52 +08:00
PATH_ARG_INDEX = 0
FILENAME_PATTERN_ARG_INDEX = 1
ZIPFILE_PATTERN_ARG_INDEX = 2
2014-03-31 19:20:27 +08:00
2002-09-15 23:16:39 +08:00
def self.run(args)
check_args(args)
2014-03-31 19:20:27 +08:00
Zip::ZipFind.find_file(args[PATH_ARG_INDEX],
2015-03-21 15:44:56 +08:00
args[FILENAME_PATTERN_ARG_INDEX],
2020-02-18 06:35:08 +08:00
args[ZIPFILE_PATTERN_ARG_INDEX]) do |filename|
report_entry_found filename
2015-03-21 16:10:37 +08:00
end
2002-09-15 23:16:39 +08:00
end
2014-03-31 19:20:27 +08:00
def self.check_args(args)
2020-02-09 23:50:00 +08:00
return if args.size == 3
usage
exit
2002-09-15 23:16:39 +08:00
end
def self.usage
2019-09-27 04:46:00 +08:00
puts "Usage: #{$PROGRAM_NAME} PATH ZIPFILENAME_PATTERN FILNAME_PATTERN"
2002-09-15 23:16:39 +08:00
end
2014-03-31 19:20:27 +08:00
def self.report_entry_found(filename)
puts filename
2002-09-15 23:16:39 +08:00
end
2002-09-15 04:59:29 +08:00
end
2002-09-15 23:16:39 +08:00
ZipFindConsoleRunner.run(ARGV)
2002-09-15 04:59:29 +08:00
end