rbfind 2.5 → 2.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/rbfind +40 -19
  3. data/lib/rbfind.rb +60 -33
  4. data/lib/rbfind/humansiz.rb +16 -5
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bee921838a5b4d93f5483295e8c7e6b263e144e8d52e5ca53a464a222a5d055
4
- data.tar.gz: 03f0b19f70747dbb152011ecc8f414d99764ad9052c82f9b0b1715939fb7a3dd
3
+ metadata.gz: 673e3195f462c1f8b06eeb61423bc73811a84e28f191f963af2c546d43717f4a
4
+ data.tar.gz: 20218e28ea03d78c4e0dba0bbf2aa2a2d8ae484839075eee8bfbec013efd2916
5
5
  SHA512:
6
- metadata.gz: 3de28232b6d9b842ced7ff2880e4d80938c194c13c93fd6a69e5265d3f6999276129bc1469eae62a121776222d27836c95cc208ae2d656080875345d342d471e
7
- data.tar.gz: d979151e81e3eaf660304c2072550f857957e9c08c4da74af67afc5d23e498021b546c33920ba20099fcb2248a2a621eccf51b9732b34212a1273188ec4d6c73
6
+ metadata.gz: 44276ce8399adf25ad8bcfad934522d5667ba8120d8d44bcda05fd705d272512a3a5302a0419b1a6d87049a948418df2d5c7c45a49603aba531a3096da103a86
7
+ data.tar.gz: 24d752cffc2e7669e60b225d6ce1108c9b0d51006215602e564daeeea1ccc2e6ad06ee306674109c371ffa28adb6da71b3f34e487959782abdba12dd71888f69
data/bin/rbfind CHANGED
@@ -31,15 +31,21 @@ module RbFind
31
31
  [ %w(--bw -w), nil, "black and white on -p or default output"],
32
32
  [ %w(--colored -c), nil, "force color on -p or default output"],
33
33
  [ %w(--depth -d), nil, "yield directory after its contents"],
34
- [ %w(--maxdepth -m), :num, "maxium step depth"],
34
+ [ %w(--maxdepth -m), :num, "maxium step depth (0 = any)"],
35
+ [ %w(--argsdepth -A), nil, "args have depth 1 (not 0)"],
35
36
  [ %w(--follow -y), nil, "follow symbolic links"],
36
- [ %w(--nosort -S), nil, "unsorted"],
37
+ [ %w(--nosort -U), nil, "unsorted"],
37
38
  [ %w(--sort-by -s), :str, "sort expression"],
38
39
  [ %w(--reverse -R), nil, "reverse the sort"],
40
+ [ %w(--time -t), nil, "sort by time, newest first"],
41
+ [ %w(--size -S), nil, "sort by size, largest first"],
42
+ [ %w(--dirs -F), nil, "sort directories before files"],
39
43
  [ %w(--require -r), :rb, "require library"],
40
44
  [ %w(--puts-path -p), nil, "do 'puts path/cpath' on true block"],
41
45
  [ %w(--ls-l -P), nil, "do 'ls -l' style output on true block"],
42
- [ %w(--wider -+), nil, "widen fields in long output format (--ls-l)"],
46
+ [ %w(--long -Q), nil, "alternate long format on true block"],
47
+ [ %w(--ino -J), nil, "show inodes and number of hard links"],
48
+ [ %w(--wider -+), nil, "widen fields in long output format"],
43
49
  [ %w(--slash -/), nil, "append a slash to directory names"],
44
50
  [ %w(--lines -l), :blk, "surround block by 'lines { |$_,$.| ... }'"],
45
51
  [ %w(--reallines -L), :blk, "same as -l but stop at any null character"],
@@ -52,6 +58,7 @@ module RbFind
52
58
  [ %w(--demand -D), :rgx, "skip all filenames but these"],
53
59
  [ %w(--ext -e), :lst, "skip all filename extensions but these"],
54
60
  [ %w(--visible -I), nil, "skip all hidden (starting with .dot)"],
61
+ [ %w(--all -a), nil, "all, including hidden (starting with .dot)"],
55
62
  [ %w(--nodirs -N), nil, "skip directories"],
56
63
  [ %w(--begin -B), :blk, "eval block before begin"],
57
64
  [ %w(--end -E), :blk, "eval block after end"],
@@ -78,15 +85,21 @@ module RbFind
78
85
  when '--bw' then @color = false
79
86
  when '--colored' then @color = true
80
87
  when '--depth' then @params[ :depth_first] = true
81
- when '--maxdepth' then @params[ :max_depth] = arg.to_i
88
+ when '--maxdepth' then @params[ :max_depth] = arg.to_i.nonzero?
89
+ when '--argsdepth' then @params[ :args_depth] = true
82
90
  when '--follow' then @params[ :follow] = true
83
91
  when '--nosort' then @params[ :sort] = false
84
- when '--sort-by' then @params[ :sort] = instance_eval "proc { |n| #{arg} }"
92
+ when '--sort-by' then @params[ :sort] = instance_eval "proc { #{arg} }"
93
+ when '--time' then @params[ :sort] = proc { mtime } ; @params[ :reverse] = true
94
+ when '--size' then @params[ :sort] = proc { size } ; @params[ :reverse] = true
95
+ when '--dirs' then @params[ :dirs] = true
85
96
  when '--reverse' then @params[ :reverse] = true
86
97
  when '--require' then require arg
87
98
  when '--puts-path' then @puts = true
88
- when '--ls-l' then @puts = true ; @wd = 6
89
- when '--wider' then @wd = @wd ? @wd.succ : 4
99
+ when '--ls-l' then @puts = :ls ; @wds = 6 ; @wd = 6
100
+ when '--long' then @puts = :alt ; @wds = 7 ; @wd = 4
101
+ when '--ino' then @puts = :ino ; @wds = 8 ; @wd = 2
102
+ when '--wider' then @wd and @wd += 2.succ ; @wds and @wds += @puts != :ls ? 4 : 3
90
103
  when '--slash' then @slash = true
91
104
  when '--lines' then @lines = :plain ; @block = arg
92
105
  when '--reallines' then @lines = :plain ; @real = true ; @block = arg
@@ -99,6 +112,7 @@ module RbFind
99
112
  when '--demand' then @demand = arg
100
113
  when '--ext' then @ext = arg
101
114
  when '--visible' then @visible = true
115
+ when '--all' then @visible = false
102
116
  when '--nodirs' then @nodirs = true
103
117
  when '--begin' then @blkbegin = arg
104
118
  when '--end' then @blkend = arg
@@ -150,11 +164,17 @@ module RbFind
150
164
  end
151
165
  if @puts then
152
166
  @block = "( #@block ) and "
153
- @block << if @wd then
154
- "spcsep stype+modes, user.w#@wd, group.w#@wd, size.w#@wd, " +
155
- "mtime.lsish, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
156
- else
157
- "puts #{opath}"
167
+ @block << case @puts
168
+ when :ls then
169
+ "spcsep stype+modes, user.w#@wd, group.w#@wd, size.w#@wds, " +
170
+ "mtime.lsish, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
171
+ when :alt then
172
+ "spcsep stype+modes, user!.w#@wd, group!.w#@wd, size.w_#@wds, " +
173
+ "mtime.long, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
174
+ when :ino then
175
+ "spcsep ino.w#@wds, nlink.w#@wd, #{opath}"
176
+ else
177
+ "puts #{opath}"
158
178
  end
159
179
  end
160
180
 
@@ -220,10 +240,10 @@ module RbFind
220
240
  "--" stops option processing.
221
241
 
222
242
  The last argument is a block that will be executed on every found
223
- file object. It may be omitted; then "puts path" is assumed or "cpath"
224
- in case the output is a terminal.
243
+ file object. It may be omitted; then "puts path" is assumed, or
244
+ "puts cpath" in case the output is a terminal.
225
245
 
226
- Default sort order is alphabetical.
246
+ Default sort order is by name.
227
247
  EOT
228
248
  end
229
249
 
@@ -246,7 +266,7 @@ module RbFind
246
266
  $ rbfind -d -m3 -- /mnt/data
247
267
  $ rbfind 'filesize > 10.MiB and colsep size.to_hib, path'
248
268
 
249
- $ rbfind -S "name =~ /^\.*/ ; $'.downcase"
269
+ $ rbfind -U "name =~ /^\.*/ ; $'.downcase"
250
270
  $ rbfind -B '$s=0' -E 'puts $s.to_h' 'filesize {|s|$s+=s}'
251
271
  $ rbfind 'puts path if ext == ".rb"'
252
272
  $ rbfind -p 'ext == ".rb"'
@@ -345,7 +365,7 @@ module RbFind
345
365
 
346
366
  def show
347
367
  puts "arguments:"
348
- @args.each { |a| puts_val a }.any? or puts_val "(none)"
368
+ @args.each { |a| puts_val a }.any? or puts_val "(none)"
349
369
  puts "parameters:"
350
370
  @params.each { |k,v| puts_val k, "=", v }.any? or puts_val "(none)"
351
371
  puts "block:"
@@ -447,8 +467,9 @@ class Integer
447
467
  # convenient formatting, right justification
448
468
  def method_missing sym, *args
449
469
  case sym.to_s # .to_s for Ruby 1.8
450
- when /\Aw_?(\d+)/ then "%#{$1}d" % self
451
- else super
470
+ when /\Aw(\d+)/ then "%#{$1}d" % self
471
+ when /\Aw_(\d+)/ then to_g.rjust $1.to_i
472
+ else super
452
473
  end
453
474
  end
454
475
  end
data/lib/rbfind.rb CHANGED
@@ -8,7 +8,7 @@ require "rbfind/csv"
8
8
 
9
9
  module RbFind
10
10
 
11
- VERSION = "2.5".freeze
11
+ VERSION = "2.8.2".freeze
12
12
 
13
13
  =begin rdoc
14
14
 
@@ -270,14 +270,16 @@ Sort without case sensitivity and preceding dot:
270
270
 
271
271
  private
272
272
 
273
- Params = Struct.new :max_depth, :depth_first, :follow,
274
- :sort, :reverse, :error, :block
273
+ Params = Struct.new :max_depth, :args_depth, :depth_first, :follow,
274
+ :sort, :dirs, :reverse, :error, :block
275
275
 
276
- def initialize max_depth: nil, depth_first: nil, follow: nil,
277
- sort: true, reverse: false, error: nil, &block
278
- @params = Params.new max_depth, depth_first, follow,
279
- (sort_parser sort), reverse, error, block
280
- @start, @count, @depth = Time.now, 0, 0
276
+ def initialize max_depth: nil, args_depth: false, depth_first: nil, follow: nil,
277
+ sort: true, dirs: false, reverse: false, error: nil, &block
278
+ @params = Params.new max_depth, args_depth, depth_first, follow,
279
+ (sort_parser sort), dirs, reverse, error, block
280
+ @start = Time.instance_eval { @start = Time.now }
281
+ Time.instance_eval { @start = Time.now }
282
+ @count, @depth = 0, 0
281
283
  end
282
284
 
283
285
  def sort_parser st
@@ -297,13 +299,12 @@ Sort without case sensitivity and preceding dot:
297
299
  if args.empty? then
298
300
  visit_dir Dir::CUR_DIR
299
301
  else
300
- args.each { |base|
301
- handle_error do
302
- File.lstat base rescue raise "`#{base}` doesn't exist."
303
- e = Entry.new base, self
304
- enter e
305
- end
306
- }
302
+ list = args.map { |base| Entry.new base, self }
303
+ list.select! { |e| handle_error do e.stat end }
304
+ sort_entries list
305
+ step_depth_args do
306
+ list.each { |e| enter e }
307
+ end
307
308
  end
308
309
  end
309
310
 
@@ -313,34 +314,62 @@ Sort without case sensitivity and preceding dot:
313
314
 
314
315
  private
315
316
 
317
+ def step_depth
318
+ @depth += 1
319
+ yield
320
+ ensure
321
+ @depth -= 1
322
+ end
323
+
324
+ def step_depth_args
325
+ if @params[ :args_depth] then
326
+ step_depth do
327
+ yield
328
+ end
329
+ else
330
+ yield
331
+ end
332
+ end
333
+
316
334
  def enter elem
317
335
  c_, @current = @current, elem
318
336
  @count += 1
319
- visit_depth
337
+ if @params.depth_first then
338
+ enter_dir
339
+ begin
340
+ call_block
341
+ rescue Prune
342
+ handle_error do
343
+ raise "#{self.class}: prune with :depth_first is pointless."
344
+ end
345
+ end
346
+ else
347
+ begin
348
+ call_block
349
+ enter_dir if @current.path
350
+ rescue Prune
351
+ end
352
+ end
320
353
  ensure
321
354
  @current = c_
322
355
  end
323
356
 
324
357
  def visit_dir dir
325
- return if @params.max_depth and @params.max_depth == @depth
326
- list = (Dir.new dir).children
327
- list = list.map { |f| Entry.new f, self }
328
- @params.sort.call list
329
- list.reverse! if @params.reverse
330
- begin
331
- @depth += 1
358
+ return if @params.max_depth and @params.max_depth <= @depth
359
+ list = (Dir.new dir).children.map { |f| Entry.new f, self }
360
+ sort_entries list
361
+ step_depth do
332
362
  list.each { |e| enter e }
333
- ensure
334
- @depth -= 1
335
363
  end
336
364
  end
337
365
 
338
- def visit_depth
339
- if @params.depth_first then
340
- enter_dir
341
- call_block
342
- else
343
- call_block and enter_dir
366
+ def sort_entries list
367
+ @params.sort.call list
368
+ list.reverse! if @params.reverse
369
+ if @params.dirs then
370
+ list.replace list.partition { |e| e.rstat.directory? rescue nil }
371
+ list.reverse! if @params.depth_first
372
+ list.flatten!
344
373
  end
345
374
  end
346
375
 
@@ -361,9 +390,7 @@ Sort without case sensitivity and preceding dot:
361
390
  @current.instance_eval &@params.block
362
391
  rescue Done
363
392
  end
364
- @current.path
365
393
  end
366
- rescue Prune
367
394
  end
368
395
 
369
396
  def handle_error
@@ -5,7 +5,7 @@
5
5
 
6
6
  =begin rdoc
7
7
 
8
- Human readable sizes, times, and modes.
8
+ Human readable sizes and times.
9
9
 
10
10
  Examples:
11
11
 
@@ -136,12 +136,23 @@ class Time
136
136
  # file.stat.mtime.lsish #=> " 1. Apr 2008 "
137
137
  #
138
138
  def lsish
139
- strftime "#{PERC_DAY}. %b " +
140
- (year == Time.now.year ? "%H:%M:%S" : "%Y ")
139
+ strftime "%e. %b " + (year == Time.start.year ? "%H:%M:%S" : "%Y ")
141
140
  end
142
141
 
143
- # Windows has no "%e".
144
- PERC_DAY = Time.now.strftime("%e") =~ /\d/ ? "%e" : "%d" # :nodoc:
142
+ def long
143
+ s = Time.start
144
+ if year == s.year && month == s.month && day == s.day then
145
+ strftime "==%H:%M:%S"
146
+ else
147
+ strftime "%Y-%m-%d"
148
+ end
149
+ end
150
+
151
+ class <<self
152
+ def start
153
+ @start ||= Time.now
154
+ end
155
+ end
145
156
 
146
157
  end
147
158
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbfind
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.5'
4
+ version: 2.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bertram Scharpf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-24 00:00:00.000000000 Z
11
+ date: 2021-03-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  A replacement for the standard UNIX command find.