delete_derived_data 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/delete_derived_data +41 -0
- data/lib/delete_derived_data/delete.rb +32 -0
- data/lib/delete_derived_data/search.rb +97 -0
- data/lib/delete_derived_data/trash.rb +26 -0
- data/lib/delete_derived_data/utils.rb +18 -0
- data/lib/delete_derived_data/version.rb +3 -0
- data/lib/delete_derived_data.rb +20 -0
- data/lib/main2.rb +261 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f80bfe4f6605d37411e9448fe83f8b51a49d3bf758ccb7e06825e2fe6202c508
|
4
|
+
data.tar.gz: 2a031dc848460a5250a578d522105cb654b36c72781ccb926202bb1eece66f85
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dde7195c24042679dae743e345663d488d8a3d72916719888ea5cf812b7a25164e6f78580ffd606662fdfed798f1c14ec43ee0715f8b7e608c2b21abe908be04
|
7
|
+
data.tar.gz: 527bf98c50f94d2c44e8a0c462955bf6ac099d55fab33920895b690417fba74011e92f0774cb0dd65192118f7b8c5005f2123e3217b232c4048c692b64ac32cc
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
if $PROGRAM_NAME == __FILE__
|
4
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'delete_derived_data'
|
8
|
+
require 'optparse'
|
9
|
+
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: delete_derived_data [options] | delete_derived_data"
|
14
|
+
|
15
|
+
opts.on('-d', '--directory PATH', "Directory that should be searching") do |path|
|
16
|
+
options[:root_dir] = path
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on('-a', '--archives', "Xcode Archives should be deleted") do |a|
|
20
|
+
options[:archives] = a
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on('-s', '--sempty', "Secure empty trash contents") do |s|
|
24
|
+
options[:sempty] = s
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on('-t', '--trash', "Empty trash contents") do |t|
|
28
|
+
options[:trash] = t
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("-V", '--verbose', "Show more debugging information") do |v|
|
32
|
+
options[:verbose] = v
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on_tail('-h', '--help', 'Show this message') { puts opts; exit }
|
36
|
+
opts.on_tail("-v", "--version", "Show version") { puts DeleteDerivedData::VERSION; exit }
|
37
|
+
opts.parse!
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
DeleteDerivedData.delete(options)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
require "find"
|
3
|
+
require "pathname"
|
4
|
+
require "tty-table"
|
5
|
+
require "tty-spinner"
|
6
|
+
require "delete_derived_data/trash"
|
7
|
+
|
8
|
+
require "tty-prompt"
|
9
|
+
|
10
|
+
module DeleteDerivedData
|
11
|
+
class Delete
|
12
|
+
def self.run(paths, options)
|
13
|
+
if paths == nil || paths.length <= 0
|
14
|
+
puts "No Data to be cleaning!"
|
15
|
+
return nil
|
16
|
+
end
|
17
|
+
|
18
|
+
paths.each {|d| Trash.move_to_trash(d)}
|
19
|
+
|
20
|
+
prompt = TTY::Prompt.new(enable_color: false, interrupt: :signal)
|
21
|
+
answer = options[:trash] || prompt.yes?("Are you sure you want to empty the trash (this cannot be undone)?")
|
22
|
+
return if !answer
|
23
|
+
|
24
|
+
if options[:sempty]
|
25
|
+
Trash.empty_securely_trash()
|
26
|
+
else
|
27
|
+
Trash.empty_trash()
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
require "delete_derived_data/utils"
|
3
|
+
|
4
|
+
module DeleteDerivedData
|
5
|
+
class Search
|
6
|
+
attr_accessor :verbose, :root_dir
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@verbose = options[:verbose]
|
10
|
+
@root_dir = options[:root_dir] || ENV["HOME"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"#{verbose} #{root_dir}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def getDerivedDatas
|
18
|
+
|
19
|
+
directory_paths = get_directory_paths(root_dir)
|
20
|
+
derived_paths = []
|
21
|
+
threads = []
|
22
|
+
|
23
|
+
table = TTY::Table.new(["Directory paths to be search"], directory_paths.map { |f| [f] })
|
24
|
+
puts table.render(:ascii)
|
25
|
+
|
26
|
+
directory_paths.each do |folder|
|
27
|
+
threads << Thread.new {
|
28
|
+
begin
|
29
|
+
Find.find(folder, ignore_error: true) {|path| derived_paths << path if path =~ /.*\DerivedData$/}
|
30
|
+
rescue Exception => e
|
31
|
+
puts e.message
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
spinner = TTY::Spinner.new("[:spinner] Search Derived Data ...", format: :dots_2)
|
37
|
+
spinner.auto_spin
|
38
|
+
|
39
|
+
threads.each {|t| t.join}
|
40
|
+
|
41
|
+
derived_size = 0
|
42
|
+
data = [:separator]
|
43
|
+
derived_paths.each { |d|
|
44
|
+
size = Filesize.dirSize(d)
|
45
|
+
derived_size = derived_size + size
|
46
|
+
data << [d, Filesize.size(size)] if verbose
|
47
|
+
}
|
48
|
+
data << :separator
|
49
|
+
data << ["Derived Data total size", Filesize.size(derived_size)]
|
50
|
+
|
51
|
+
spinner.stop
|
52
|
+
|
53
|
+
table = TTY::Table.new(["DerivedData", "Size"], data)
|
54
|
+
puts table.render(:ascii, alignments: [:left, :right], padding: [0,1,0,1])
|
55
|
+
|
56
|
+
derived_paths
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def getArchives
|
61
|
+
|
62
|
+
spinner = TTY::Spinner.new("[:spinner] Search Xcode Archives ...", format: :dots_2)
|
63
|
+
spinner.auto_spin
|
64
|
+
|
65
|
+
xcode_archives = []
|
66
|
+
data = []
|
67
|
+
xcode_archives_size = 0
|
68
|
+
|
69
|
+
data << :separator
|
70
|
+
Dir["#{ENV["HOME"]}/Library/Developer/Xcode/Archives/**"].select { |d|
|
71
|
+
size = Filesize.dirSize(d)
|
72
|
+
xcode_archives_size = xcode_archives_size + size
|
73
|
+
data << [d, Filesize.size(size)] if verbose
|
74
|
+
xcode_archives << d
|
75
|
+
}
|
76
|
+
data << :separator
|
77
|
+
data << ["Xcode Archives total size", Filesize.size(xcode_archives_size)]
|
78
|
+
|
79
|
+
spinner.stop
|
80
|
+
|
81
|
+
table = TTY::Table.new(["Xcode Archives", "Size"], data)
|
82
|
+
puts table.render(:ascii, alignments: [:left, :right], padding: [0,1,0,1])
|
83
|
+
|
84
|
+
xcode_archives
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def get_directory_paths(root_dir)
|
91
|
+
Pathname.new(root_dir).children.select { |c|
|
92
|
+
c.directory? && c.zero? == false && c.blockdev? == false && c.basename.to_s[0] != '.'
|
93
|
+
}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
module DeleteDerivedData
|
3
|
+
class Trash
|
4
|
+
def self.move_to_trash(file)
|
5
|
+
puts "Telling Finder to move the file #{file} to trash... "
|
6
|
+
IO.popen("osascript", "w") do |stdin|
|
7
|
+
stdin.puts %Q{tell app "Finder" to move the POSIX file "#{file}" to trash}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.empty_trash
|
12
|
+
puts "Telling Finder to empty trash... "
|
13
|
+
IO.popen("osascript", "w") do |stdin|
|
14
|
+
stdin.puts %Q{tell app "Finder" to empty trash}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.empty_securely_trash
|
19
|
+
puts "Telling Finder to securely empty trash... "
|
20
|
+
IO.popen("osascript", "w") do |stdin|
|
21
|
+
stdin.puts %Q{tell app "Finder" to empty trash with security}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module DeleteDerivedData
|
3
|
+
class Filesize
|
4
|
+
def self.dirSize(path)
|
5
|
+
File.size(path) + Dir["#{path}/**/*"].select { |f| File.file?(f) }.sum { |f| File.size(f) }
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.size(size)
|
9
|
+
units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'Pib', 'EiB']
|
10
|
+
|
11
|
+
return '0.0 B' if size == 0
|
12
|
+
exp = (Math.log(size) / Math.log(1024)).to_i
|
13
|
+
exp = 6 if exp > 6
|
14
|
+
|
15
|
+
'%.1f %s' % [size.to_f / 1024 ** exp, units[exp]]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
require "delete_derived_data/search"
|
3
|
+
require "delete_derived_data/delete"
|
4
|
+
require "delete_derived_data/version"
|
5
|
+
|
6
|
+
module DeleteDerivedData
|
7
|
+
def self.delete(options = {})
|
8
|
+
search = Search.new(options)
|
9
|
+
derived_paths = search.getDerivedDatas
|
10
|
+
archives_paths = search.getArchives if options[:archives]
|
11
|
+
|
12
|
+
if !derived_paths.nil? && derived_paths.length > 0
|
13
|
+
Delete.run(derived_paths, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
if !archives_paths.nil? && archives_paths.length > 0
|
17
|
+
Delete.run(archives_paths, options)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/main2.rb
ADDED
@@ -0,0 +1,261 @@
|
|
1
|
+
|
2
|
+
require 'find'
|
3
|
+
require "tty-spinner"
|
4
|
+
require "tty-prompt"
|
5
|
+
require "tty-table"
|
6
|
+
require 'trash'
|
7
|
+
|
8
|
+
require "pathname"
|
9
|
+
|
10
|
+
require 'logger'
|
11
|
+
|
12
|
+
class DerivedData
|
13
|
+
def self.hi(language = "english")
|
14
|
+
cmd = 'ls'
|
15
|
+
system(cmd)
|
16
|
+
|
17
|
+
puts "Hello world!"
|
18
|
+
puts language
|
19
|
+
spinner = TTY::Spinner.new("[:spinner] Loading ...", format: :pulse_2)
|
20
|
+
|
21
|
+
spinner.auto_spin # Automatic animation with default interval
|
22
|
+
|
23
|
+
# sleep(2) # Perform task
|
24
|
+
|
25
|
+
derived_paths = []
|
26
|
+
# Find.find('../..') do |path|
|
27
|
+
# derived_paths << path if path =~ /.*\DerivedData$/
|
28
|
+
# end
|
29
|
+
Find.find('../') do |path|
|
30
|
+
# derived_paths << File.expand_path(path, __dir__) if path =~ /.*\DerivedData$/
|
31
|
+
derived_paths << path if path =~ /.*\DerivedData$/
|
32
|
+
end
|
33
|
+
|
34
|
+
spinner.stop("Done!") # Stop animation
|
35
|
+
|
36
|
+
puts derived_paths
|
37
|
+
# trash = Trash.new
|
38
|
+
# trash.throw_out(*derived_paths)
|
39
|
+
# Trash.new.throw_out(*derived_paths)
|
40
|
+
|
41
|
+
somedir = derived_paths?.first
|
42
|
+
# FileUtils.mv(derived_paths.first, File.expand_path('~/.Trash/'))
|
43
|
+
if File.directory?(somedir)
|
44
|
+
puts somedir
|
45
|
+
FileUtils.remove_dir(somedir)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.clean
|
51
|
+
# cmd = 'sh delete_all_derived_data.sh'
|
52
|
+
# system(cmd)
|
53
|
+
|
54
|
+
# cmd = "echo 'hi'"
|
55
|
+
# value = %x( echo 'hi' )
|
56
|
+
# value = %x[ #{cmd} ]
|
57
|
+
# wasGood = system( "echo 'hi'" )
|
58
|
+
# wasGood = system( cmd )
|
59
|
+
|
60
|
+
spinner = TTY::Spinner.new("[:spinner] Search ...", format: :dots_2)
|
61
|
+
spinner.auto_spin
|
62
|
+
# puts File.expand_path('../', __dir__)
|
63
|
+
# system('find ../ -type d -name "DerivedData" 2>/dev/null -exec trash -v {} +')
|
64
|
+
# system('trash -e')
|
65
|
+
somedir = "/Users/nicolaerogojan/gitRepository/Personal/delete_all_derived_data/DerivedData"
|
66
|
+
# FileUtils.remove_dir(somedir)
|
67
|
+
system("echo #{somedir}")
|
68
|
+
# system("trash #{somedir}") # OK
|
69
|
+
|
70
|
+
system("trash", "-v", "#{somedir}")
|
71
|
+
# system("trash -e")
|
72
|
+
spinner.stop("Done!")
|
73
|
+
end
|
74
|
+
|
75
|
+
def find
|
76
|
+
logger = Logger.new(STDOUT)
|
77
|
+
logger.level = Logger::DEBUG
|
78
|
+
logger.debug(Dir.home)
|
79
|
+
puts "Started At #{Time.now}"
|
80
|
+
|
81
|
+
spinner = TTY::Spinner.new("[:spinner] Search ...", format: :dots_2)
|
82
|
+
spinner.auto_spin
|
83
|
+
|
84
|
+
# base_dir_path = Dir.home
|
85
|
+
# base_dir_path = "/Users/nicolaerogojan/gitRepository"
|
86
|
+
# base_dir_path = "/Users/nicolaerogojan/gitRepository/Personal/delete_all_derived_data"
|
87
|
+
base_dir_path = "/Users/nicolaerogojan/.Trash"
|
88
|
+
# directory_paths = Dir.glob(File.join(base_dir_path, '*', ''))
|
89
|
+
directory_paths = Pathname.new(base_dir_path).children.select { |c| c.directory? && c.basename(path)[0] != ?. }
|
90
|
+
|
91
|
+
logger.debug base_dir_path
|
92
|
+
logger.debug directory_paths
|
93
|
+
|
94
|
+
derived_paths = []
|
95
|
+
arr = []
|
96
|
+
|
97
|
+
# directory_paths.each do |f|
|
98
|
+
# arr << Thread.new {
|
99
|
+
# Find.find(f) {|path| derived_paths << path if path =~ /.*\DerivedData$/}
|
100
|
+
# }
|
101
|
+
# end
|
102
|
+
|
103
|
+
# directory_paths.each do |folder|
|
104
|
+
# Find.find(folder) do |path|
|
105
|
+
# if FileTest.directory?(path)
|
106
|
+
# if File.basename(path)[0] == ?.
|
107
|
+
# Find.prune # Don't look any further into this directory.
|
108
|
+
# else
|
109
|
+
# next
|
110
|
+
# end
|
111
|
+
# else
|
112
|
+
# if path =~ /.*\DerivedData$/
|
113
|
+
# puts path
|
114
|
+
# derived_paths << path
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
# end
|
118
|
+
# end
|
119
|
+
|
120
|
+
directory_paths.each do |folder|
|
121
|
+
arr << Thread.new {
|
122
|
+
Find.find(folder){ |path|
|
123
|
+
next if !File.directory?(path)
|
124
|
+
next if File.basename(path)[0] == ?.
|
125
|
+
|
126
|
+
# puts File.stat(path).blockdev?
|
127
|
+
next if File.stat(path).blockdev? == true
|
128
|
+
if path =~ /.*\DerivedData$/
|
129
|
+
puts path
|
130
|
+
derived_paths << path
|
131
|
+
end
|
132
|
+
}
|
133
|
+
}
|
134
|
+
end
|
135
|
+
|
136
|
+
arr.each {|t| t.join}
|
137
|
+
|
138
|
+
logger.debug arr.count
|
139
|
+
logger.debug derived_paths
|
140
|
+
|
141
|
+
# derived_paths.each {|f| logger.debug f; trash(f)}
|
142
|
+
spinner.stop("Done!")
|
143
|
+
puts "End at #{Time.now}"
|
144
|
+
end
|
145
|
+
|
146
|
+
def find_in_path(folder)
|
147
|
+
derived_paths = []
|
148
|
+
Find.find(folder) do |path|
|
149
|
+
derived_paths << path if path =~ /.*\DerivedData$/
|
150
|
+
end
|
151
|
+
puts derived_paths
|
152
|
+
end
|
153
|
+
|
154
|
+
def trash(file)
|
155
|
+
IO.popen("osascript", "w") do |stdin|
|
156
|
+
stdin.puts %Q{tell app "Finder" to move the POSIX file "#{file}" to trash}
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def find2
|
161
|
+
spinner = TTY::Spinner.new("[:spinner] Search ...", format: :dots_2)
|
162
|
+
spinner.auto_spin
|
163
|
+
|
164
|
+
base_dir_path = ENV["HOME"]
|
165
|
+
# base_dir_path = "/Users/nicolaerogojan/.Trash"
|
166
|
+
# directory_paths = Dir.glob(File.join(base_dir_path, '*', ''))
|
167
|
+
directory_paths = []
|
168
|
+
derived_paths = []
|
169
|
+
threads = []
|
170
|
+
|
171
|
+
Pathname.new(base_dir_path).children.select do |c|
|
172
|
+
# c.directory? && c.zero?
|
173
|
+
# puts "dirname -> #{c.dirname}"
|
174
|
+
# puts "basename -> #{c.basename}"
|
175
|
+
# puts "directory -> #{c.directory?}"
|
176
|
+
# puts "blockdev -> #{c.blockdev?}"
|
177
|
+
# puts "zero -> #{c.zero?}"
|
178
|
+
# puts " -> #{c.to_s[0]}"
|
179
|
+
# puts " -> #{c.to_s[0] != '.'}"
|
180
|
+
# puts " -> #{c.basename != '.'}"
|
181
|
+
# puts " -> #{c.basename.to_s[0] != '.'}"
|
182
|
+
# puts "owned -> #{c.owned?}"
|
183
|
+
# puts "=============================="
|
184
|
+
# if c.directory? && c.zero? == false && c.blockdev? == false && c.basename.to_s[0] != '.' && c.basename.to_s != 'Library'
|
185
|
+
if c.directory? && c.zero? == false && c.blockdev? == false && c.basename.to_s[0] != '.'
|
186
|
+
directory_paths << c
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# puts
|
191
|
+
# puts base_dir_path
|
192
|
+
# puts "=============================="
|
193
|
+
# puts directory_paths
|
194
|
+
# puts "=============================="
|
195
|
+
|
196
|
+
directory_paths.each do |folder|
|
197
|
+
threads << Thread.new {
|
198
|
+
begin
|
199
|
+
Find.find(folder, ignore_error: true) {|path| derived_paths << path if path =~ /.*\DerivedData$/}
|
200
|
+
rescue Exception => e
|
201
|
+
puts e.message
|
202
|
+
end
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
206
|
+
# Thread.abort_on_exception = false
|
207
|
+
# Thread.report_on_exception = false
|
208
|
+
# threads.each {|t| t.abort_on_exception = false; t.report_on_exception = false; t.join}
|
209
|
+
threads.each {|t| t.join}
|
210
|
+
|
211
|
+
# table = TTY::Table.new(["header1","header2"], [["a1", "a2"], ["b1", "b2"]])
|
212
|
+
|
213
|
+
# roys = [["a1"], ["a2"]]
|
214
|
+
# roys = []
|
215
|
+
# directory_paths.each do |folder|
|
216
|
+
# roys << [folder]
|
217
|
+
# end
|
218
|
+
|
219
|
+
roys = directory_paths.map { |f| [f] }
|
220
|
+
table = TTY::Table.new(["directory_paths"], roys)
|
221
|
+
puts
|
222
|
+
puts table.render(:ascii)
|
223
|
+
|
224
|
+
puts derived_paths
|
225
|
+
puts "=============================="
|
226
|
+
|
227
|
+
xcode_archives_size = Filesize.size(Dir["#{ENV["HOME"]}/Library/Developer/Xcode/Archives/**/*"].select { |f| File.file?(f) }.sum { |f| File.size(f) })
|
228
|
+
puts "Xcode Archives size: #{xcode_archives_size}"
|
229
|
+
spinner.stop("Done!")
|
230
|
+
|
231
|
+
prompt = TTY::Prompt.new
|
232
|
+
|
233
|
+
# answer = prompt.yes?("Do you like Ruby?")
|
234
|
+
answer = prompt.yes?("Are you a human?") do |q|
|
235
|
+
q.default false
|
236
|
+
q.positive "Yup"
|
237
|
+
q.negative "Nope"
|
238
|
+
end
|
239
|
+
|
240
|
+
puts "Answer: #{answer}"
|
241
|
+
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|
245
|
+
|
246
|
+
class Filesize
|
247
|
+
def self.size(size)
|
248
|
+
units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'Pib', 'EiB']
|
249
|
+
|
250
|
+
return '0.0 B' if size == 0
|
251
|
+
exp = (Math.log(size) / Math.log(1024)).to_i
|
252
|
+
exp = 6 if exp > 6
|
253
|
+
|
254
|
+
'%.1f %s' % [size.to_f / 1024 ** exp, units[exp]]
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
clean = DerivedData.new
|
259
|
+
# DerivedData.hi("Test")
|
260
|
+
# DerivedData.new.find()
|
261
|
+
DerivedData.new.find2()
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: delete_derived_data
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rogojan Nicolae
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-spinner
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: tty-prompt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.23.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.23.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: tty-table
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.12.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.12.0
|
55
|
+
description: Search all DerivedData folders and moves files or folders to the trash.
|
56
|
+
Empty the trash (asks for confirmation)
|
57
|
+
email: rogojan.colea@gmail.com
|
58
|
+
executables:
|
59
|
+
- delete_derived_data
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- bin/delete_derived_data
|
64
|
+
- lib/delete_derived_data.rb
|
65
|
+
- lib/delete_derived_data/delete.rb
|
66
|
+
- lib/delete_derived_data/search.rb
|
67
|
+
- lib/delete_derived_data/trash.rb
|
68
|
+
- lib/delete_derived_data/utils.rb
|
69
|
+
- lib/delete_derived_data/version.rb
|
70
|
+
- lib/main2.rb
|
71
|
+
homepage: https://github.com/rognick/delete_derived_data
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubygems_version: 3.1.4
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Delete all derived data!
|
94
|
+
test_files: []
|