Ich baue ein Bash-Skript, das Log-Dateien älter als x Tage in einem angegebenen Verzeichnis löscht. Wie Sie wissen, ist "find" auf den hadoops fs nicht verfügbar, also fand ich eine nette Methode, dies in Ruby zu tun und fragte mich, ob es einen Weg gibt, dies in bash zu erreichen.Löschen von Dateien älter als x Tage auf hadoop
In Ruby:
#!/usr/bin/env ruby
require "date"
five_days_ago = Date.parse(Time.now.to_s) - 5
IO.popen("hadoop fs -lsr /tmp").each_line do |line|
permissions,replication,user,group,size,mod_date,mod_time,path = *line.split(/\s+/)
if (mod_date)
if Date.parse(mod_date.to_s) < five_days_ago
puts line
if permissions.split('')[0] == 'd'
puts "deleting #{path}"
`hadoop fs -rmr -skipTrash #{path}`
dirname = path
next
end
next if path.start_with? dirname
`hadoop fs -rm -skipTrash #{path}`
end
end
end