Hadoop&Bash:删除匹配范围的文件名

vol*_*lni 5 bash hadoop

假设您有一个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)

感谢基思的灵感