reorganise 0.0.3 → 0.0.4
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.
- data/bin/reorganise +69 -27
- data/lib/reorganise/version.rb +1 -1
- metadata +4 -4
data/bin/reorganise
CHANGED
@@ -7,7 +7,7 @@ module Reorganise
|
|
7
7
|
require 'to_regexp'
|
8
8
|
require 'fileutils'
|
9
9
|
|
10
|
-
attr_accessor :options, :matcher, :extensions, :directory, :series_name
|
10
|
+
attr_accessor :options, :matcher, :extensions, :directory, :series_name, :output_dir
|
11
11
|
|
12
12
|
def initialize(argv)
|
13
13
|
|
@@ -27,8 +27,12 @@ module Reorganise
|
|
27
27
|
@options[:regex] = @matcher
|
28
28
|
|
29
29
|
opts.on('-i', '--input-dir DIRECTORY', 'Specifies where to look for episodes to rename.') do |dir_name|
|
30
|
-
@options[:
|
30
|
+
@options[:input_directory] = dir_name.gsub(/\\/, "/")
|
31
31
|
end
|
32
|
+
|
33
|
+
opts.on('-o', '--output-dir DIRECTORY', 'Specifies where to move renamed files to. Default is the input directory.') do |dir_name|
|
34
|
+
@options[:output_directory] = dir_name.gsub(/\\/, "/")
|
35
|
+
end
|
32
36
|
|
33
37
|
opts.on('-n', '--name NAME', 'What to rename the series to. Title is derived from series if not given.') do |name|
|
34
38
|
@options[:series_name] = sanitize_user_string(name)
|
@@ -58,27 +62,33 @@ module Reorganise
|
|
58
62
|
end
|
59
63
|
|
60
64
|
def sort!
|
61
|
-
@directory = @options[:
|
65
|
+
@directory = @options[:input_directory]
|
62
66
|
@series_name = @options[:series_name]
|
67
|
+
@output_dir = @options[:output_directory]
|
63
68
|
|
64
|
-
if directory.nil? or !Dir.exists?(directory)
|
65
|
-
puts "ERROR: Directory '#{directory}' does not exist. Run with -h for more information."
|
69
|
+
if directory.nil? or !Dir.exists?(@directory)
|
70
|
+
puts "ERROR: Directory '#{@directory}' does not exist. Run with -h for more information."
|
66
71
|
exit
|
67
72
|
end
|
68
73
|
|
69
|
-
Dir.
|
74
|
+
if @output_dir and !Dir.exists?(@output_dir)
|
75
|
+
puts "ERROR: Destination directory #{@output_dir} does not exist."
|
76
|
+
exit
|
77
|
+
end
|
78
|
+
|
79
|
+
Dir.chdir(@directory)
|
70
80
|
filenames = Dir.glob("**/*.{#{@extensions.join(",")}}")
|
71
81
|
|
72
82
|
puts "------------------------------------------------------------------------"
|
73
83
|
puts "Finding all files with the following extensions: #{@extensions.join(", ")}"
|
74
84
|
puts ""
|
75
|
-
puts "Directory: #{directory}"
|
85
|
+
puts "Directory: #{@directory}"
|
76
86
|
puts "Found #{filenames.size} files."
|
77
87
|
puts "------------------------------------------------------------------------"
|
78
88
|
puts ""
|
79
89
|
puts ""
|
80
90
|
puts "!!! NOTICE: This is a PRETEND renaming to show what would happen. !!! "
|
81
|
-
puts "To confirm the renaming of files, run the command again with -c. e.g. `reorganise -c -
|
91
|
+
puts "To confirm the renaming of files, run the command again with -c. e.g. `reorganise -c -i [input-dir]"
|
82
92
|
puts ""
|
83
93
|
puts ""
|
84
94
|
puts "Starting to rename files using regex #{@options[:regex]}..."
|
@@ -90,36 +100,56 @@ module Reorganise
|
|
90
100
|
if details = parse_filename(filename)
|
91
101
|
|
92
102
|
old_directory = File.absolute_path(File.dirname(filename))
|
103
|
+
old_file = File.join(old_directory, details[:basename])
|
93
104
|
|
94
|
-
|
95
|
-
|
96
|
-
|
105
|
+
unless @output_dir
|
106
|
+
# Check to see if the files were already organised into season folders
|
107
|
+
if old_directory.split("/").last =~ /^(?:season (\d+)|s(\d+))$/i and details[:season].to_i == ($1 || $2).to_i
|
108
|
+
target_directory = old_directory
|
109
|
+
else
|
110
|
+
target_directory = File.join(old_directory, "Season #{details[:season].to_i}")
|
111
|
+
end
|
97
112
|
else
|
98
|
-
|
113
|
+
unless details[:series_name].nil? or details[:series_name].empty?
|
114
|
+
target_directory = File.join(@output_dir, details[:series_name], "Season #{details[:season].to_i}")
|
115
|
+
else
|
116
|
+
puts "ERROR: Cannot move #{old_file} as it does not have a series name and none was supplied. Please supply a series name with -n [series name]."
|
117
|
+
next
|
118
|
+
end
|
99
119
|
end
|
100
120
|
|
101
121
|
if details[:series_name]
|
102
122
|
renamed_file = "#{details[:series_name]} - S#{details[:season]}E#{details[:episode]}#{details[:ext]}"
|
103
123
|
else
|
104
124
|
renamed_file = "S#{details[:season]}E#{details[:episode]}#{details[:ext]}"
|
105
|
-
end
|
125
|
+
end
|
106
126
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
127
|
+
target_file = File.join(target_directory, renamed_file)
|
128
|
+
|
129
|
+
# Check if the target file already exists
|
130
|
+
unless File.file?(target_file)
|
131
|
+
|
132
|
+
if @options[:verbose] or !@options[:confirm]
|
133
|
+
puts "-: #{old_file}"
|
134
|
+
puts "+: #{target_file}"
|
135
|
+
#puts ""
|
136
|
+
end
|
137
|
+
|
138
|
+
# Perform mv if confimed
|
139
|
+
if @options[:confirm]
|
140
|
+
FileUtils.mkdir_p(target_directory)
|
141
|
+
FileUtils.mv(old_file, target_file)
|
142
|
+
try_delete_folder(old_directory)
|
143
|
+
end
|
144
|
+
|
145
|
+
else
|
146
|
+
puts "ERROR: Could not move #{old_file} to #{target_file} as it already exists."
|
117
147
|
end
|
118
148
|
else
|
119
|
-
puts "ERROR: Skipped file
|
149
|
+
puts "ERROR: Skipped file #{filename} due to invalid file format."
|
120
150
|
end
|
121
151
|
else
|
122
|
-
puts "ERROR: Skipped non-file
|
152
|
+
puts "ERROR: Skipped non-file #{filename}."
|
123
153
|
end
|
124
154
|
|
125
155
|
end
|
@@ -144,8 +174,8 @@ module Reorganise
|
|
144
174
|
|
145
175
|
parts.each_with_index do |v, k|
|
146
176
|
if v =~ @matcher
|
147
|
-
season = "%02d" % ($1 || $3 || $5).to_i
|
148
|
-
episode = "%02d" % ($2 || $4 || $6).to_i
|
177
|
+
season = "%02d" % ($1 || $3 || $5 || $7).to_i
|
178
|
+
episode = "%02d" % ($2 || $4 || $6 || $8).to_i
|
149
179
|
position = k
|
150
180
|
|
151
181
|
break if position != -1
|
@@ -167,6 +197,18 @@ module Reorganise
|
|
167
197
|
end
|
168
198
|
end
|
169
199
|
|
200
|
+
def try_delete_folder(directory)
|
201
|
+
files = Dir.glob(File.join(directory, "*"))
|
202
|
+
if files.empty?
|
203
|
+
puts "Deleting empty folder: #{directory}" if @options[:verbose]
|
204
|
+
begin
|
205
|
+
FileUtils.rmdir(directory)
|
206
|
+
rescue Errno::ENOTEMPTY
|
207
|
+
puts "ERROR: Cannot delete folder #{directory} as it is not empty."
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
170
212
|
def sanitize_user_string(str)
|
171
213
|
return false if str.empty?
|
172
214
|
str = str.gsub(/[^\s\w.\-]/, '')
|
data/lib/reorganise/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reorganise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-09 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: to_regexp
|
16
|
-
requirement: &
|
16
|
+
requirement: &70441060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70441060
|
25
25
|
description: Sorts and renames your series.
|
26
26
|
email:
|
27
27
|
- justin.cossutti@gmail.com
|