shell 批量操作hadoop mv 文件

shell 批量操作hadoop mv 文件

遇到的问题:

需要批量将某个目录下的文件有规则的mv到另外一个目录

示例:
/tmp/archive/bg/b1201804/2018-04-17/imaga-r-00007
/tmp/archive/bg/b201502/2015-02-27/imaga-r-00001
/tmp/archive/bg/b201503/2015-03-27/imaga-r-00001
/tmp/archive/bg/b201504/2015-02-27/imaga-r-00001

结构为 /tmp/archive/bg/{b1,b}201???/${y}-${m}-${d}/-r-

拷贝到目录 /tmp/archive2/bg/${y}-${m}-${d}/-r- 下面

解决办法:
----------./run.sh-------------------

export HADOOP_HOME=/xxx/hadoop
$HADOOP_HOME/bin/hadoop fs -ls /tmp/archive/bg/{b1,b}201???/????-??-??/-r- | awk '{print $8}' | xargs -L1 ./mmu_mv2.sh

---------./mmu_mv.sh-----------------
output=/tmp/archive2/bg
echo $1 ##拿到hdfs路径 /tmp/archive/bg/b1201804/2018-04-17/imaga-r-00007
date=echo $1 | awk -F'/' '{print $6}' ##拿到日期那一个值
echo $date
filename=basename $1 ## 拿到文件名imaga-r-000072018-04-17
echo $filename
echo $output/$date/$filename ## 拼接输出路径
$HADOOP_HOME/bin/hadoop fs -test -e $output/$date/
if [ $? -eq 0 ] ;then
echo ""
else
$HADOOP_HOME/bin/hadoop fs -mkdir $output/$date/ ##创建输出路径
fi
$HADOOP_HOME/bin/hadoop fs -mv $1 $output/$date/$filename.$RANDOM$RANDOM ## 添加随机数 位了保证重复文件不冲突

用到的命令:

  • awk
  • xargs
  • basename: http://codingstandards.iteye.com/blog/840784

$ xargs --help
用法: xargs [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]
[-E eof-str] [-e[eof-str]] [--eof[=eof-str]]
[-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]
[-I replace-str] [-i[replace-str]] [--replace[=replace-str]]
[-n max-args] [--max-args=max-args]
[-s max-chars] [--max-chars=max-chars]
[-P max-procs] [--max-procs=max-procs] [--show-limits]
[--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]
[--version] [--help] [command [initial-arguments]]

你可能感兴趣的:(shell 批量操作hadoop mv 文件)