如何移动hdfs中的最后n个文件

How to move the last n files in hdfs

我在 HDFS 中有一个文件夹包含 1000000 个文件,我想将基于日期时间排序后的最后一个“8797”文件移动到 HDFS 中的另一个文件夹?我尝试使用 xargs 但效果不佳。还有其他想法吗?

这是所有文件之间的确切分割点。我想在“2021-03-09 15:15”

之后移动文件

-rw-rw-r--+ 3 talend_user talend_group 102013 2021-03-09 15:14 /user/file_1

-rw-rw-r--+ 3 talend_user talend_group 9360 2021-03-09 15:15 /user/file_2

使用 ls -t 按修改时间对文件进行排序:

./hadoop-2.10.0/bin/hadoop fs -ls -t /tmp/

然后从第八列提取文件名:

 ./hadoop-2.10.0/bin/hadoop fs -ls -t /tmp/ | awk '{print }' 

将此输出保存到文件中:

./hadoop-2.10.0/bin/hadoop fs -ls -t /tmp/ | awk '{print }' > test.txt

最后使用tail -n提取最后n个文件。

tail -n 8797 test.txt

或者在一个命令中如下:

 ./hadoop-2.10.0/bin/hadoop fs -ls -t /tmp/ | awk '{print }' | tail -n8797

现在您可以借助 linux 中的管道命令通过此输出移动您的文件。 根据您的问题,您可能需要 head 而不是 tail.

更新:

通过这样的方式移动您的文件:

./hadoop-2.10.0/bin/hadoop fs -cp  `./hadoop-2.10.0/bin/hadoop fs -ls -t /tmp/ | awk '{print }' | tail -n3` /newdirectory