- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想编写一个数据保留 shell 脚本,当给定两个输入时 - 基本目录和保留期(以天为单位)仅删除超过保留期的文件(而不是目录)。我在互联网上搜索过,也有一些解决方案,但他们是列出目录并根据修改时间删除它们。
但是一个目录可能有一个非常旧的时间戳,但可能包含最近更新的文件。
我该如何进行? find
命令中的 mindepth
和 maxdepth
选项在 HDFS 中不起作用。
基本目录可能有多个子目录,子目录可能有子目录等等。
base
目录是 /user/abhikaushik
然后我们有yyyy/mm/dd/hh
形式的子文件夹,比如base/2017/04/23/22
或者 base/studies/programming/file1.txt
等等
最佳答案
这个怎么样:
hdfs dfs -ls -R/MY/BASE/DIR/PATH | grep "^-"| tr -s ""|剪切-d' ' -f6-8 | awk 'BEGIN{ RETENTION_DAYS=10;最后=24*60*60*RETENTION_DAYS; “日期 +%s” |现在获取线路 } { cmd="date -d'\''"$1""$2"'\'' +%s";命令 |什么时候上线;差异=现在-时间; if(DIFF > LAST){ 打印 $3 }}'
在哪里,
递归列出所有文件:
hdfs dfs -ls -R /MY/BASE/DIR/PATH
仅从列表中获取FILES:
grep "^-"
替换多余的空格:
tr -s " "
获取所需的列:
cut -d' ' -f6-8
使用 awk 处理:
awk
初始化DIFF持续时间和当前时间:
RETENTION_DAYS=10;
LAST=24*60*60*RETENTION_DAYS;
"date +%s" | getline NOW
创建命令以获取 HDFS 上文件时间戳的纪元值:
cmd="date -d'\''"$1" "$2"'\'' +%s";
执行命令获取HDFS文件的epoch值:
cmd | getline WHEN;
获取时差:
DIFF=NOW-WHEN;
根据差异打印输出:
if(DIFF > LAST){ print $3 }}
一旦您确定上面的命令列出了您要删除的文件,请继续
现在,除了在最后一步执行 print
操作,您可以执行您真正想要的操作,即删除旧文件,如下所示:
hdfs dfs -ls -R/MY/BASE/DIR/PATH | grep "^-"| tr -s ""|剪切-d' ' -f6-8 | awk 'BEGIN{ RETENTION_DAYS=10;最后=24*60*60*RETENTION_DAYS; “日期 +%s” |现在获取线路 } { cmd="date -d'\''"$1""$2"'\'' +%s";命令 |什么时候上线;差异=现在-时间; if(DIFF > LAST){ system("hdfs dfs -rm -r -skipTrash "$3 ) }}'
您只需根据您的要求(此处为 10 天)更改 /MY/BASE/DIR/PATH
和 RETENTION_DAYS
的值。
希望这对您有所帮助!
关于shell - Hadoop - 只删除早于 X 天的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44882051/
我有一个 javascript 函数,可以执行以下操作; 它将日期编辑框设置为与另一个日期编辑相同的日期。但是我希望它将 txt_Testin
我有一个输入框,类型为“时间”。我想将迟到时间 (23:00pm) 作为最小值,将早期时间 (6:00am) 作为最大值 - 创建一个 23pm - 6am 的范围。 (即中午 11 点、中午 12
使用 Joda 时间并获得类似以下行为的最简单方法是什么: public boolean check( DateTime checkTime ) { DateTime someTime = n
我想计算 updated_at 比 created_at 早 2 小时的记录。 代码 $teLang = $kentekens->where('updated_at', '>', 'created_a
我是一名优秀的程序员,十分优秀!