如何删除多个HDFS目录中最近创建的文件?
How to delete the most recently created files in multiple HDFS directories?
我犯了一个错误,将几百个零件文件添加到按日期分区的 table 中。我能够看到哪些文件是新文件(这些是我要删除的文件)。我在这里看到的大多数情况都与删除早于某个日期的文件有关,但我只想删除我最近的文件。
一天,我可能有 3 个这样的文件,我只想删除新文件。我可以说它是新的,因为当我使用 hadoop fs -ls
时更新时间戳
/this/is/my_directory/event_date1_newfile_20191114
/this/is/my_directory/event_date1_oldfile_20190801
/this/is/my_directory/event_date1_oldfile_20190801
我有很多日期,所以我必须为 event_date2、event_date3 等完成这个,总是从每个日期中删除 'new_file_20191114'。
旧的日期是 2019 年 8 月,我的新文件是昨天更新的,11/14/19。
我觉得应该有一个 easy/quick 解决方案,但我无法从大多数人询问的情况中找到相反的情况。
正如您在回答中提到的,您已经获得了需要删除的文件列表。
创建一个简单的脚本将输出重定向到临时文件
像这样
hdfs dfs -ls /tmp | sort -k6,7 > files.txt
请注意 sort -k6,7 这将给出所有文件,但按时间戳排序。我确定您不想全部删除,因此您可以 select 需要删除的前 n 个文件 让我们说 100
然后您可以将命令更新为
hdfs dfs -ls /tmp | sort -k6,7 | head -100 | awk '{print }' > files.txt
或者如果您知道新文件的具体时间戳,那么您可以尝试以下命令
hdfs dfs -ls /tmp | sort -k6,7 | grep "<exact_time_stamp>" | awk '{print }' > files.txt
然后读取那个文件,一个一个删除所有文件
while read file; do
hdfs -rm $file
echo "Deleted $file" >> deleted_files.txt #this is to track which files have been deleted
done <files.txt
所以你完成的脚本可以像
#!/bin/bash
hdfs dfs -ls /tmp | sort -k6,7 | grep "<exact_time_stamp>" | awk '{print }' > files.txt
while read file; do
hdfs -rm $file
echo "Deleted $file" >> deleted_files.txt #this is to track which files have been deleted
done <files.txt
我犯了一个错误,将几百个零件文件添加到按日期分区的 table 中。我能够看到哪些文件是新文件(这些是我要删除的文件)。我在这里看到的大多数情况都与删除早于某个日期的文件有关,但我只想删除我最近的文件。
一天,我可能有 3 个这样的文件,我只想删除新文件。我可以说它是新的,因为当我使用 hadoop fs -ls
时更新时间戳/this/is/my_directory/event_date1_newfile_20191114
/this/is/my_directory/event_date1_oldfile_20190801
/this/is/my_directory/event_date1_oldfile_20190801
我有很多日期,所以我必须为 event_date2、event_date3 等完成这个,总是从每个日期中删除 'new_file_20191114'。
旧的日期是 2019 年 8 月,我的新文件是昨天更新的,11/14/19。
我觉得应该有一个 easy/quick 解决方案,但我无法从大多数人询问的情况中找到相反的情况。
正如您在回答中提到的,您已经获得了需要删除的文件列表。 创建一个简单的脚本将输出重定向到临时文件
像这样
hdfs dfs -ls /tmp | sort -k6,7 > files.txt
请注意 sort -k6,7 这将给出所有文件,但按时间戳排序。我确定您不想全部删除,因此您可以 select 需要删除的前 n 个文件 让我们说 100
然后您可以将命令更新为
hdfs dfs -ls /tmp | sort -k6,7 | head -100 | awk '{print }' > files.txt
或者如果您知道新文件的具体时间戳,那么您可以尝试以下命令
hdfs dfs -ls /tmp | sort -k6,7 | grep "<exact_time_stamp>" | awk '{print }' > files.txt
然后读取那个文件,一个一个删除所有文件
while read file; do
hdfs -rm $file
echo "Deleted $file" >> deleted_files.txt #this is to track which files have been deleted
done <files.txt
所以你完成的脚本可以像
#!/bin/bash
hdfs dfs -ls /tmp | sort -k6,7 | grep "<exact_time_stamp>" | awk '{print }' > files.txt
while read file; do
hdfs -rm $file
echo "Deleted $file" >> deleted_files.txt #this is to track which files have been deleted
done <files.txt