我正在构建一个bash脚本,用于删除指定目录中早于x天的日志文件。正如您所知,“find”在hadoopfs上是不可用的,所以我在ruby中找到了一个很好的方法来实现这一点,我想知道是否有一种方法可以在bash中实现这一点。
在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
2条答案
按热度按时间bxfogqkk1#
我想出来了。我知道有些人不推荐使用
ls
对于这些问题,我用grep -o
创建一个新行(这样我就知道需要什么字符串)并且我知道文件名模式是什么,这样就可以完美地工作了。gywdnpxw2#
下面是我在bash中使用的内容,您可以尝试一下:
e、 格雷普所有8个月前的文件。根据需要更改grep regex模式:
删除文件: