我想从hdfs位置删除除一个以外的所有文件,但找不到任何解决方案。我试过了 shopt -s extglob 那么 hadoop fs -rm location/!(filename) 但没有起作用。
shopt -s extglob
hadoop fs -rm location/!(filename)
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[@]}"
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选项来获得除特定模式或文件名以外的所有文件。
2条答案
按热度按时间e0bqpujr1#
使用下面的代码,我可以一次从hdfs位置删除所有文件,除了需要的文件。
ffx8fchx2#
最好的选择是将特定文件复制到其他目录,删除目标目录中的所有剩余文件,然后将特定文件移动到同一目录。
除此之外,还有其他几种方法可以做同样的事情。
下面是一个示例shell脚本,用于删除除一个匹配模式之外的所有文件。
列出所有的文件,然后使用grep和-v选项来获得除特定模式或文件名以外的所有文件。