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 ## 添加随机数 位了保证重复文件不冲突

用到的命令:

$ 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]]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 12,580评论 1 19
  • 第1章 小试牛刀 $ 是普通用户,# 表示管理员用户 root。 shebang:#!。sharp / hash ...
    巴喬書摘阅读 11,540评论 1 4
  • 首先,我们在使用前先看看HDFS是什麽?这将有助于我们是以后的运维使用和故障排除思路的获得。 HDFS采用mast...
    W_Bousquet阅读 9,739评论 0 2
  • 简介 xargs指令可以从标准输入读取数据,并利用这些数据“组建”并“执行”指令。它的作用是将参数列表转换成小块分...
    JSON_NULL阅读 13,489评论 1 6
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 13,460评论 3 53