dfm 0.0.2 → 0.0.3
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.
- checksums.yaml +8 -8
- data/README.md +31 -0
- data/bin/dfm +8 -7
- data/lib/dfm/version.rb +3 -1
- data/lib/dfm.rb +1 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjAyNGI2NDE4M2M4NzRmODUwNjQzYjkxZTFjNjQxZTJlNjg3NTAxMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzBiY2RkYTcxNmI0ODlhMGE0ZTdhNmU3NjFhMTRkYTBhZGE4ODRiZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2IxYzYyZGIyZDQzYmU2ZTIyOTM1NzIyYWE1ZDNkM2QwNGZjYTE4OGIxNTJk
|
10
|
+
ZmMwYWYzZDZiMTBjMWE0NjVmNmIwOTIyMzg0ODZkNmMyZjgwZTljOWZkZmU4
|
11
|
+
ZjYyODNlM2VkMDZkMjAwYWE4NTNkYjMxZjllODFjYThkYTY2NWE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Yjc3OTc5MTlhYmVmOTM5OTgyY2MxZGQyYzg2OGZkZDcwMjE4YjM1ZWIzMDYy
|
14
|
+
NTljYjZlNmVmZDJlMjg3NDI1ODFjMmM1ZWJhYjEwM2RiNmE4MjMyZTJjZDYx
|
15
|
+
OGMxZWM1MDQ1OWQ2NjBlNzJhNmJlNWMxN2NkZmM1ZDc1MTU1OTE=
|
data/README.md
CHANGED
@@ -2,3 +2,34 @@ dfm
|
|
2
2
|
===
|
3
3
|
|
4
4
|
Duplicate File Manager
|
5
|
+
|
6
|
+
The purpose of dfm is to locate duplicate files through a recursive search.
|
7
|
+
|
8
|
+
You can create an instance of the DFM object with optionally secifing the
|
9
|
+
directory path and the file extensions.
|
10
|
+
|
11
|
+
instance = DFM.new( path: './', filters: ["jpg","png"] )
|
12
|
+
|
13
|
+
If you are using a ruby version before 2 then this would be:
|
14
|
+
|
15
|
+
instance = DFM.new( { :path => './', :filters => ["jpg","png"] } )
|
16
|
+
|
17
|
+
Then you may get a hash of the hex matches (indacating files with identical content) by
|
18
|
+
|
19
|
+
instance.hex
|
20
|
+
|
21
|
+
And by duplicate faile name by
|
22
|
+
|
23
|
+
instance.name
|
24
|
+
|
25
|
+
Either of these can be called with false if you want only single instances of files.
|
26
|
+
|
27
|
+
instance.hex( false )
|
28
|
+
instance.name( false )
|
29
|
+
|
30
|
+
---
|
31
|
+
|
32
|
+
Also included is a command line version which outputs nicely formatted JSON in case
|
33
|
+
you would like to use it with anything else. Type `dfm -h` on the command line to get
|
34
|
+
a list of available options. Running `dfm` by itself will recursively search the current
|
35
|
+
folder for all duplicates by both file name and hash indexes.
|
data/bin/dfm
CHANGED
@@ -13,7 +13,7 @@ options = {}
|
|
13
13
|
printers = Array.new
|
14
14
|
|
15
15
|
OptionParser.new do |opts|
|
16
|
-
opts.banner = "Usage: dfm [options] [path]\nDefaults: dfm -
|
16
|
+
opts.banner = "Usage: dfm [options] [path]\nDefaults: dfm -xd ." + File::SEPARATOR
|
17
17
|
opts.on("-f", "--filters FILTERS", Array, "File extension filters") do |filters|
|
18
18
|
options[:filters] = filters
|
19
19
|
end
|
@@ -33,11 +33,12 @@ end.parse!
|
|
33
33
|
path = ARGV.select {|i| File.directory? i }[0]
|
34
34
|
program = DFM.new( options.update( { :path => path } ) )
|
35
35
|
if printers.empty?
|
36
|
-
program.
|
37
|
-
program.print_duplicates( "name" )
|
36
|
+
puts JSON.pretty_generate( program.hex.update( program.name ) )
|
38
37
|
else
|
39
|
-
|
40
|
-
if printers.include? "
|
41
|
-
if printers.include? "
|
42
|
-
if printers.include? "
|
38
|
+
hash = {}
|
39
|
+
if printers.include? "dh"; hash.update( program.hex ); end
|
40
|
+
if printers.include? "dn"; hash.update( program.name ); end
|
41
|
+
if printers.include? "sh"; hash.update( program.hex( false ) ); end
|
42
|
+
if printers.include? "sn"; hash.update( program.name( false ) ); end
|
43
|
+
puts JSON.pretty_generate( hash )
|
43
44
|
end
|
data/lib/dfm/version.rb
CHANGED
data/lib/dfm.rb
CHANGED
@@ -57,11 +57,7 @@ class DFM
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def select_duplicates( opt = { :hash => @files_by_hexdigest, :duplicates => true } )
|
60
|
-
|
61
|
-
opt[ :hash ].select { |k,v| v.length >= 2 }
|
62
|
-
else
|
63
|
-
opt[ :hash ].select { |k,v| v.length == 1 }
|
64
|
-
end
|
60
|
+
opt[ :hash ].select { |k,v| opt[ :duplicates ] ? ( v.length >= 2 ) : ( v.length == 1 ) }
|
65
61
|
end
|
66
62
|
|
67
63
|
def print_match( opt = { :type => "hex", :duplicates => true } )
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dfm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel P. Clark / 6ftDan(TM)
|
@@ -10,7 +10,7 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Parse duplicate files to process!
|
13
|
+
description: Duplicate File Manager. Parse duplicate files to process!
|
14
14
|
email: webmaster@6ftdan.com
|
15
15
|
executables:
|
16
16
|
- dfm
|
@@ -45,5 +45,5 @@ rubyforge_project:
|
|
45
45
|
rubygems_version: 2.2.2
|
46
46
|
signing_key:
|
47
47
|
specification_version: 4
|
48
|
-
summary: Duplicate File Manager
|
48
|
+
summary: Duplicate File Manager.
|
49
49
|
test_files: []
|