假设您有一个HDFS文件列表,其中包含一个公共前缀和一个递增后缀.例如,
part-1.gz, part-2.gz, part-3.gz, ..., part-50.gz
Run Code Online (Sandbox Code Playgroud)
我只想在目录中留下一些文件,比如说3.任何三个文件都可以.这些文件将用于测试,因此文件的选择无关紧要.
删除47个其他文件的简单方法和最快方法是什么?
Don*_*ner 16
这里几个选项:
手动将三个文件移动到新文件夹,然后删除旧文件夹.
抓取文件名fs -ls,然后拉上前n,然后rm它们.在我看来,这是最强大的方法.
hadoop fs -ls /path/to/files 给你ls输出
hadoop fs -ls /path/to/files | grep 'part' | awk '{print $8}' 仅输出文件名(相应地调整grep以获取所需的文件).
hadoop fs -ls /path/to/files | grep 'part' | awk '{print $8}' | head -n47 抢到前47名
将其转换为for循环并将它们放入:
for k in `hadoop fs -ls /path/to/files | grep part | awk '{print $8}' | head -n47`
do
hadoop fs -rm $k
done
Run Code Online (Sandbox Code Playgroud)
您可以使用xargs以下代码而不是for循环:
hadoop fs -ls /path/to/files | grep part | awk '{print $8}' | head -n47 | xargs hadoop fs -rm
Run Code Online (Sandbox Code Playgroud)
感谢基思的灵感