如何移动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
我在 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