如何从hdfs位置删除除一个以外的所有文件?

pbwdgjma  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(502)

我想从hdfs位置删除除一个以外的所有文件,但找不到任何解决方案。
我试过了 shopt -s extglob 那么 hadoop fs -rm location/!(filename) 但没有起作用。

e0bqpujr

e0bqpujr1#

使用下面的代码,我可以一次从hdfs位置删除所有文件,除了需要的文件。

file_arr=()
for file in $(hadoop fs -ls /tmp/table_name/ | grep -v 'part-' | awk '{print $8}')
do
    file_arr+=("$file")
done
hadoop fs -rm "${file_arr[@]}"
ffx8fchx

ffx8fchx2#

最好的选择是将特定文件复制到其他目录,删除目标目录中的所有剩余文件,然后将特定文件移动到同一目录。
除此之外,还有其他几种方法可以做同样的事情。
下面是一个示例shell脚本,用于删除除一个匹配模式之外的所有文件。


# !/bin/bash

echo "Executing the shell script"

for file in $(hadoop fs -ls /user/xxxx/dev/hadoop/external/csvfiles |grep -v 'a_file_pattern_to_search' | awk '{print $8}')
do
    printf '\n' >> "$file"
    hadoop fs -rm "$file"
done
echo "shell scripts ends"

列出所有的文件,然后使用grep和-v选项来获得除特定模式或文件名以外的所有文件。

相关问题