imagebackup 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|