imagebackup 0.1.2 → 0.2.0
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 +4 -4
- data/README.md +9 -4
- data/lib/classes/filetypes.csv +19 -0
- data/lib/classes/filetypes.rb +30 -0
- data/lib/imagebackup.rb +50 -36
- data/lib/imagebackup/version.rb +1 -1
- data/lib/methods/build_paths.rb +7 -0
- data/lib/methods/copy_pic.rb +11 -0
- data/lib/methods/get_dates.rb +17 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19afaa9b557d9f7f975671cbac434cc122ba66c45530b151ca1e3f2927fa721e
|
4
|
+
data.tar.gz: 99c50850195ec05e5689736a0e382596ab5513e5246e8e63abf8b15f03137527
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67bb185227e95535d45675263420321bdc42ae3c3616d446d4ef3592c301087f9a82f89216d9249f280f06762b492efdb234c0154892d668a3faeca2791d15d3
|
7
|
+
data.tar.gz: bfe84709a6a03bbcf7135683dd352cd6a0a70e2430a91b4276d53ff6980d12c15a3e70036b640f3e2a672eb327cf8b2493a6d09bbdc9dfe7fefe386012aad9b3
|
data/README.md
CHANGED
@@ -7,13 +7,18 @@
|
|
7
7
|
|
8
8
|
## Dependencies:
|
9
9
|
|
10
|
-
|
10
|
+
**Ruby** v2.3.0 or greater, plus gems:
|
11
11
|
- exiv2
|
12
|
-
- ffprober
|
13
|
-
|
12
|
+
- ffprober
|
13
|
+
|
14
|
+
Ruby modules:
|
14
15
|
- fileutils.rb
|
15
|
-
- json
|
16
|
+
- json
|
16
17
|
|
18
|
+
Bundler should handle all these dependencies. If for some reason it doesn't you can run this in terminal:
|
19
|
+
```bash
|
20
|
+
$ gem install exiv2 ffprober
|
21
|
+
```
|
17
22
|
|
18
23
|
## Usage:
|
19
24
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
class FileTypes
|
4
|
+
def self.list
|
5
|
+
file_list = []
|
6
|
+
CSV.foreach("#{File.dirname(__FILE__)}/filetypes.csv") do |csv|
|
7
|
+
file_list << "**/*.#{csv[0]}"
|
8
|
+
file_list << "**/*.#{csv[0].upcase}"
|
9
|
+
end
|
10
|
+
return file_list
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.add(ext=nil,type=nil)
|
14
|
+
unless ext
|
15
|
+
puts 'please enter the file type\'s extension, with or without the dot.'
|
16
|
+
ext = gets.strip
|
17
|
+
end
|
18
|
+
unless type
|
19
|
+
puts 'please enter "movie" or "pic" so we know what we\'re working with.'
|
20
|
+
type = gets.strip
|
21
|
+
end
|
22
|
+
ext = ext.to_s.gsub(/[*."]/,'')
|
23
|
+
p type
|
24
|
+
type = (type.downcase.include?('m')) ? "movie" : "pic"
|
25
|
+
puts "opening file \"#{File.dirname(__FILE__)}/filetypes.csv\""
|
26
|
+
CSV.open("#{File.dirname(__FILE__)}/filetypes.csv","a") do |csv|
|
27
|
+
p csv << [ext,type]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/imagebackup.rb
CHANGED
@@ -1,48 +1,62 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require_relative 'imagebackup/version'
|
3
3
|
|
4
|
+
require_relative 'classes/filetypes'
|
5
|
+
require_relative 'methods/build_paths'
|
6
|
+
require_relative 'methods/get_dates'
|
7
|
+
require_relative 'methods/copy_pic'
|
8
|
+
|
4
9
|
require 'exiv2'
|
5
10
|
require 'fileutils'
|
6
11
|
require 'ffprober'
|
7
12
|
require 'json'
|
13
|
+
require 'getoptlong'
|
14
|
+
|
15
|
+
def main_loop(dest,dryrun=true)
|
16
|
+
file_types = FileTypes.list
|
17
|
+
Dir.glob(file_types).reverse_each do |f|
|
18
|
+
|
19
|
+
file = "#{Dir.pwd}/#{f}"
|
8
20
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
21
|
+
parms = build_paths(dest,file,get_dates(file))
|
22
|
+
outfile = parms[0]
|
23
|
+
destpath = parms[1]
|
24
|
+
|
25
|
+
if File.exist?(outfile)
|
26
|
+
puts "\"#{outfile}\" already exists."
|
27
|
+
else
|
28
|
+
copy_pic(file,outfile,destpath,dryrun)
|
29
|
+
end
|
18
30
|
end
|
19
|
-
return date
|
20
31
|
end
|
21
32
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
'
|
29
|
-
'
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
33
|
+
# main_loop(ARGV[0])
|
34
|
+
|
35
|
+
dryrun = true
|
36
|
+
|
37
|
+
if (ARGV & ['-n','--dry-run']).any?
|
38
|
+
dryrun = true
|
39
|
+
ARGV.delete('-n')
|
40
|
+
ARGV.delete('--dry-run')
|
41
|
+
else
|
42
|
+
# FIXME: THIS IS REVERSED TO ALWAYS BE TRUE WHILE I'M TESTING. CHANGE BELOW TO false BEFORE DEPLOYMENT
|
43
|
+
dryrun = true
|
44
|
+
puts "dry run is disabled! i'm really going to mess with your files!"
|
45
|
+
end
|
46
|
+
if ARGV.include?('-a')#,'--add-filetype']).any?
|
47
|
+
ext=ARGV[ARGV.index('-a')+1]
|
48
|
+
type=ARGV[ARGV.index('-a')+2]
|
49
|
+
ARGV.slice!(ARGV.index('-a')..ARGV.index('-a')+2)
|
50
|
+
end
|
51
|
+
if ARGV.include?('--add-filetype')
|
52
|
+
ext=ARGV[ARGV.index('--add-filetype')+1]
|
53
|
+
type=ARGV[ARGV.index('--add-filetype')+2]
|
54
|
+
ARGV.slice!(ARGV.index('--add-filetype')..ARGV.index('--add-filetype')+2)
|
55
|
+
end
|
56
|
+
if ext
|
57
|
+
FileTypes.add(ext,type)
|
58
|
+
end
|
59
|
+
|
60
|
+
if ARGV
|
61
|
+
main_loop(ARGV[0])
|
48
62
|
end
|
data/lib/imagebackup/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
def copy_pic(file,outfile,destpath,dryrun)
|
2
|
+
if dryrun
|
3
|
+
puts "pretending to copy \"#{file}\" to \"#{outfile}\""
|
4
|
+
puts "FileUtils.mkdir_p(#{destpath})"
|
5
|
+
puts "FileUtils.cp(#{file},#{outfile})"
|
6
|
+
else
|
7
|
+
puts "copying \"#{file}\" to \"#{outfile}\""
|
8
|
+
FileUtils.mkdir_p(destpath)
|
9
|
+
FileUtils.cp(file,outfile)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
def get_dates(file)
|
2
|
+
begin
|
3
|
+
image = Exiv2::ImageFactory.open(file)
|
4
|
+
image.read_metadata
|
5
|
+
date = image.exif_data.find { |v| v[0] == 'Exif.Image.DateTime' }
|
6
|
+
date = date[1].split[0].gsub(':','-')
|
7
|
+
rescue => exiv2_no_exifdata
|
8
|
+
begin
|
9
|
+
probe = Ffprober::Parser.from_file(file)
|
10
|
+
date = probe.format.tags[:creation_time].split('T')[0]
|
11
|
+
rescue => invalid_or_corrupt_file
|
12
|
+
fileobj = File.new(file)
|
13
|
+
date = "#{fileobj.stat.ctime.year}-#{fileobj.stat.ctime.month}-#{fileobj.stat.ctime.day}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
return date
|
17
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imagebackup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- adrian-sal-kennedy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: exiv2
|
@@ -55,8 +55,13 @@ files:
|
|
55
55
|
- bin/console
|
56
56
|
- bin/setup
|
57
57
|
- imagebackup.gemspec
|
58
|
+
- lib/classes/filetypes.csv
|
59
|
+
- lib/classes/filetypes.rb
|
58
60
|
- lib/imagebackup.rb
|
59
61
|
- lib/imagebackup/version.rb
|
62
|
+
- lib/methods/build_paths.rb
|
63
|
+
- lib/methods/copy_pic.rb
|
64
|
+
- lib/methods/get_dates.rb
|
60
65
|
homepage: https://github.com/adrian-sal-kennedy/imagebackup
|
61
66
|
licenses:
|
62
67
|
- MIT
|