stat_file 1.0.13
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.
Potentially problematic release.
This version of stat_file might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/lib/stat_file.rb +1 -0
- data/lib/stat_file/stat_file.rb +237 -0
- data/stat_file.gemspec +51 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 63e270a21b1fac3d14e6b2f3059b2d2af31518b439e04540678db3faeabe2100
|
4
|
+
data.tar.gz: ae4524bc6b5758bbacf88b9f9700d7e2a6a5b1895cab75ccb34d5e5562cfa11f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 771dfcc38b1a5fe2e9350855b5113699fb94feb290326e07fe337cdc60c6513adab7a757fb52762082b336e1c0f1e59aaccbce1db904167099ad8ee79adfeef8
|
7
|
+
data.tar.gz: 34643c90bd90270b043d6f15296d9688bf8a9e377dba647f90480142e1c2243614d5b3f8759701bd31822fc21fe6c6cd4f896227b8938d03ddddc785972fca57
|
data/lib/stat_file.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'stat_file/stat_file.rb'
|
@@ -0,0 +1,237 @@
|
|
1
|
+
#!/System/Index/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === StatFile
|
6
|
+
#
|
7
|
+
# require 'stat_file/stat_file.rb'
|
8
|
+
# =========================================================================== #
|
9
|
+
# Bug:
|
10
|
+
# The access entry is not completely correct - the number is ok but
|
11
|
+
# the rxw--- format is wrong.
|
12
|
+
# =========================================================================== #
|
13
|
+
require 'etc'
|
14
|
+
begin
|
15
|
+
require 'colours'
|
16
|
+
rescue LoadError; end
|
17
|
+
require 'opn'
|
18
|
+
|
19
|
+
class StatFile
|
20
|
+
|
21
|
+
include Colours
|
22
|
+
|
23
|
+
N = "\n" unless defined? N
|
24
|
+
|
25
|
+
# ========================================================================= #
|
26
|
+
# === SHALL_WE_DEBUG
|
27
|
+
# ========================================================================= #
|
28
|
+
SHALL_WE_DEBUG = false unless defined? SHALL_WE_DEBUG
|
29
|
+
|
30
|
+
# ========================================================================= #
|
31
|
+
# === RED_ON_BLACK
|
32
|
+
# ========================================================================= #
|
33
|
+
RED_ON_BLACK = "\e[31;48m" unless defined? RED_ON_BLACK
|
34
|
+
|
35
|
+
# ========================================================================= #
|
36
|
+
# === REVERT
|
37
|
+
# ========================================================================= #
|
38
|
+
REVERT = '\e[0m' unless defined? REVERT
|
39
|
+
|
40
|
+
# ========================================================================= #
|
41
|
+
# === initialize
|
42
|
+
# ========================================================================= #
|
43
|
+
def initialize(
|
44
|
+
this_file,
|
45
|
+
be_verbose = true,
|
46
|
+
run_already = true
|
47
|
+
)
|
48
|
+
reset # This must be called before set_be_verbose()
|
49
|
+
be_verbose = false if be_verbose == :dont_be_verbose
|
50
|
+
set_be_verbose if be_verbose
|
51
|
+
set_file(this_file)
|
52
|
+
run if run_already
|
53
|
+
end
|
54
|
+
|
55
|
+
# ========================================================================= #
|
56
|
+
# === reset
|
57
|
+
# ========================================================================= #
|
58
|
+
def reset
|
59
|
+
@be_verbose = false # Default.
|
60
|
+
@debug = SHALL_WE_DEBUG
|
61
|
+
@padding_left = ' '
|
62
|
+
end
|
63
|
+
|
64
|
+
# ========================================================================= #
|
65
|
+
# === file?
|
66
|
+
# ========================================================================= #
|
67
|
+
def file?
|
68
|
+
@file
|
69
|
+
end
|
70
|
+
|
71
|
+
# ========================================================================= #
|
72
|
+
# === set_file
|
73
|
+
# ========================================================================= #
|
74
|
+
def set_file(i, get_rid_of_slashdot = false)
|
75
|
+
if get_rid_of_slashdot
|
76
|
+
i.delete!('/') if i.include? '/' # Since 06.12.2011 we try to get rid of possible '/' in the string.
|
77
|
+
end
|
78
|
+
i = i.first if i.is_a? Array
|
79
|
+
i = i.to_s.dup
|
80
|
+
@file = i
|
81
|
+
end
|
82
|
+
|
83
|
+
# ========================================================================= #
|
84
|
+
# === set_be_verbose
|
85
|
+
# ========================================================================= #
|
86
|
+
def set_be_verbose
|
87
|
+
@be_verbose = true
|
88
|
+
end
|
89
|
+
|
90
|
+
# ========================================================================= #
|
91
|
+
# === is_on_roebe?
|
92
|
+
# ========================================================================= #
|
93
|
+
def is_on_roebe?
|
94
|
+
ENV['IS_ROEBE'].to_s == '1'
|
95
|
+
end
|
96
|
+
|
97
|
+
# ========================================================================= #
|
98
|
+
# === stat_file
|
99
|
+
# ========================================================================= #
|
100
|
+
def stat_file(f = @file)
|
101
|
+
if f.to_s.empty?
|
102
|
+
opn; e 'No such file could be found. Perhaps you '
|
103
|
+
opn; e 'forgot to pass in a valid filename?'
|
104
|
+
end
|
105
|
+
if f
|
106
|
+
if f.is_a? Array
|
107
|
+
f.each { |this_file| stat_file(this_file) }
|
108
|
+
else
|
109
|
+
@is_symlink = File.symlink?(f) ? true : false
|
110
|
+
if @debug
|
111
|
+
e "Debugging in stat_file.rb: Is `#{f}` a symlink or not? #{@is_symlink}"
|
112
|
+
end
|
113
|
+
if is_on_roebe? and !File.exist?(f)
|
114
|
+
begin
|
115
|
+
require 'beautiful_url'
|
116
|
+
f = BeautifulUrl[f]
|
117
|
+
f = f.first if f.is_a? Array
|
118
|
+
rescue LoadError; end
|
119
|
+
end
|
120
|
+
string = ' File: `'+f+"'"
|
121
|
+
# =================================================================== #
|
122
|
+
# If it is a symlink we have to check whether the target exists
|
123
|
+
# or not.
|
124
|
+
# =================================================================== #
|
125
|
+
if @is_symlink
|
126
|
+
f = File.readlink(f)
|
127
|
+
string << ' -> `'+f+"'"
|
128
|
+
end
|
129
|
+
# =================================================================== #
|
130
|
+
# Now we can retrieve the information.
|
131
|
+
# =================================================================== #
|
132
|
+
if File.exist?(f)
|
133
|
+
_ = File.stat(f)
|
134
|
+
file_type = File.ftype(f)
|
135
|
+
case file_type
|
136
|
+
when 'directory'
|
137
|
+
target_type = 'directory'
|
138
|
+
when 'file'
|
139
|
+
target_type = 'regular file'
|
140
|
+
when 'symlink','link'
|
141
|
+
target_type = 'symlink'
|
142
|
+
end
|
143
|
+
# Prepend a newline to it. I think it looks better that way.
|
144
|
+
@result = N+string+N # reset again here.
|
145
|
+
@result << @padding_left+' Size: '+
|
146
|
+
(@size = _.size.to_s).to_s+' Blocks: '+_.blocks.to_s+' '+target_type.to_s+N
|
147
|
+
@result << @padding_left+return_device_string+' Inode: '+_.ino.to_s+N
|
148
|
+
begin
|
149
|
+
gid = File.stat(f).gid.to_s
|
150
|
+
gid_name = Etc.getgrgid(File.stat(f).gid).name # i.e. "root"
|
151
|
+
uid = File.stat(f).uid.to_s
|
152
|
+
uid_name = Etc.getpwuid(File.stat(f).uid).name # i.e. "root"
|
153
|
+
# =============================================================== #
|
154
|
+
# Next we will add the access entry. The Access entry may
|
155
|
+
# have a leading 0 or 1.
|
156
|
+
# =============================================================== #
|
157
|
+
access_mode = File.stat(f).mode.to_s(8)[-4,4] # Get the last 4 chars only.
|
158
|
+
access_entry = 'Access: ('+access_mode+'/-rwxr-xr-x) Uid: ( '+uid+'/ '+uid_name+') Gid: ( '+gid+'/ '+gid_name+')'
|
159
|
+
@result << @padding_left+access_entry+N
|
160
|
+
rescue Exception => error; pp error; end
|
161
|
+
@result << @padding_left+'Created at: '+File.ctime(f).to_s+N
|
162
|
+
@result << @padding_left+'Last accessed: '+File.atime(f).to_s+N
|
163
|
+
@result << @padding_left+'Last modified: '+File.mtime(f).to_s+N
|
164
|
+
e @result if @be_verbose
|
165
|
+
else # Else the file does not exit.
|
166
|
+
if be_verbose?
|
167
|
+
opn; ewarn 'But target file `'+sfile(f)+
|
168
|
+
swarn('` does not exist.') # File.readlink(@file)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end; alias run stat_file
|
174
|
+
|
175
|
+
# ========================================================================= #
|
176
|
+
# === result?
|
177
|
+
# ========================================================================= #
|
178
|
+
def result?
|
179
|
+
@result
|
180
|
+
end; alias result result? # === result
|
181
|
+
|
182
|
+
# ========================================================================= #
|
183
|
+
# === be_verbose?
|
184
|
+
# ========================================================================= #
|
185
|
+
def be_verbose?
|
186
|
+
@be_verbose
|
187
|
+
end
|
188
|
+
|
189
|
+
# ========================================================================= #
|
190
|
+
# === size?
|
191
|
+
# ========================================================================= #
|
192
|
+
def size?
|
193
|
+
@size
|
194
|
+
end; alias size size? # === size()
|
195
|
+
|
196
|
+
# ========================================================================= #
|
197
|
+
# === return_device_string
|
198
|
+
#
|
199
|
+
# This method is assumed to return an entry such as the following one:
|
200
|
+
#
|
201
|
+
# Device: 801h/2049d
|
202
|
+
#
|
203
|
+
# Note that this may differ from systemd to non-systemd systems.
|
204
|
+
# ========================================================================= #
|
205
|
+
def return_device_string
|
206
|
+
result = 'Device: '
|
207
|
+
# ======================================================================= #
|
208
|
+
# First, find out the current device:
|
209
|
+
# ======================================================================= #
|
210
|
+
base_dir = File.dirname(file?)
|
211
|
+
cmd = `df #{base_dir}`
|
212
|
+
device_number = cmd.split(N)[1].split(' ')[0]
|
213
|
+
# ======================================================================= #
|
214
|
+
# device_number now has something like /dev/sda1
|
215
|
+
# In order to obtain the major and minor version,
|
216
|
+
# we must do this:
|
217
|
+
# ======================================================================= #
|
218
|
+
cmd = "ls -al #{device_number}"
|
219
|
+
major_minor = `#{cmd}` # To get major/minor = 8/1
|
220
|
+
# ======================================================================= #
|
221
|
+
# This may however had fail. We assume that it will fail when it
|
222
|
+
# includes the string "by-uuid".
|
223
|
+
# ======================================================================= #
|
224
|
+
applied_match = major_minor.match(/disk (\d, \d)/)
|
225
|
+
if applied_match # Protect against nil values.
|
226
|
+
major, minor = applied_match[1].split(',').map(&:strip)
|
227
|
+
major_and_minor = major+'0'+minor
|
228
|
+
result << major_and_minor+'h/'+major_and_minor.to_i(16).to_s+'d '
|
229
|
+
end
|
230
|
+
result
|
231
|
+
end
|
232
|
+
|
233
|
+
end
|
234
|
+
|
235
|
+
if __FILE__ == $PROGRAM_NAME
|
236
|
+
StatFile.new(ARGV.first, true)
|
237
|
+
end # sfile $SYSBIN/ruby
|
data/stat_file.gemspec
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# =========================================================================== #
|
2
|
+
# Gemspec for Project StatFile.
|
3
|
+
# =========================================================================== #
|
4
|
+
Gem::Specification.new { |s|
|
5
|
+
|
6
|
+
s.name = 'stat_file'
|
7
|
+
s.version = '1.0.13'
|
8
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
9
|
+
|
10
|
+
s.summary = <<-EOF
|
11
|
+
|
12
|
+
This library is called stat_file. It allows you to
|
13
|
+
do basic stat functionality, like the Unix Tool.
|
14
|
+
|
15
|
+
If you have specific suggestions to make this gem more
|
16
|
+
useful for others, please drop me an email at:
|
17
|
+
|
18
|
+
shevegen@gmail.com
|
19
|
+
|
20
|
+
Thank you.
|
21
|
+
|
22
|
+
EOF
|
23
|
+
|
24
|
+
s.description = <<-EOF
|
25
|
+
|
26
|
+
This library is called stat_file. It allows you to
|
27
|
+
do basic stat functionality, like the Unix Tool.
|
28
|
+
|
29
|
+
If you have specific suggestions to make this gem more
|
30
|
+
useful for others, please drop me an email at:
|
31
|
+
|
32
|
+
shevegen@gmail.com
|
33
|
+
|
34
|
+
Thank you.
|
35
|
+
|
36
|
+
EOF
|
37
|
+
|
38
|
+
s.authors = ['Robert A. Heiler']
|
39
|
+
s.email = 'shevegen@gmail.com'
|
40
|
+
s.files = Dir['**/*']
|
41
|
+
s.license = 'GPL-2.0'
|
42
|
+
s.homepage = 'http://rubygems.org/gems/stat_file'
|
43
|
+
|
44
|
+
s.required_ruby_version = '>= '+RUBY_VERSION
|
45
|
+
s.required_rubygems_version = '>= '+Gem::VERSION
|
46
|
+
s.rubygems_version = '>= '+Gem::VERSION
|
47
|
+
|
48
|
+
s.add_dependency 'opn'
|
49
|
+
s.add_dependency 'colours'
|
50
|
+
|
51
|
+
}
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stat_file
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.13
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robert A. Heiler
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-07-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: opn
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colours
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: |2+
|
42
|
+
|
43
|
+
This library is called stat_file. It allows you to
|
44
|
+
do basic stat functionality, like the Unix Tool.
|
45
|
+
|
46
|
+
If you have specific suggestions to make this gem more
|
47
|
+
useful for others, please drop me an email at:
|
48
|
+
|
49
|
+
shevegen@gmail.com
|
50
|
+
|
51
|
+
Thank you.
|
52
|
+
|
53
|
+
email: shevegen@gmail.com
|
54
|
+
executables: []
|
55
|
+
extensions: []
|
56
|
+
extra_rdoc_files: []
|
57
|
+
files:
|
58
|
+
- lib/stat_file.rb
|
59
|
+
- lib/stat_file/stat_file.rb
|
60
|
+
- stat_file.gemspec
|
61
|
+
homepage: http://rubygems.org/gems/stat_file
|
62
|
+
licenses:
|
63
|
+
- GPL-2.0
|
64
|
+
metadata: {}
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 2.6.3
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 3.0.4
|
79
|
+
requirements: []
|
80
|
+
rubygems_version: 3.0.4
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: 'This library is called stat_file. It allows you to do basic stat functionality,
|
84
|
+
like the Unix Tool. If you have specific suggestions to make this gem more useful
|
85
|
+
for others, please drop me an email at: shevegen@gmail.com Thank you.'
|
86
|
+
test_files: []
|