【问题标题】:Copying the files - for each date from source into target directory with same date复制文件 - 对于每个日期从源到目标目录具有相同的日期
【发布时间】:2021-06-09 18:37:26
【问题描述】:

我准备了一个 shell 脚本来将文件从本地复制到 hdfs,但有一个问题。我已经为当月的每一天(即六月)创建了目录。我正在寻找某种方法将相应日期的文件复制到相应的 hdfs 文件夹中

前-

Test_2G3G_20210601* file to 20210601 folder in hdfs
Test_2G3G_20210602* file to 20210602 folder in hdfs etc

有没有办法使用 shell 脚本来做到这一点?

【问题讨论】:

  • 当然有。您需要循环播放每一天,并为每一天创建目录并将带有当天日期的文件移动到您创建的目录中。看看for循环,mkdircp。开始、研究、阅读 bash 脚本。对于您的问题,请阅读How to Askminimal reproducible example 了解下一个问题。

标签: linux bash shell unix


【解决方案1】:

编辑:

#!/bin/bash
path=$1
dstpath=$2
files=$(ls $path)
for file in $files
do
IFS='.' read -ra fs <<< "$file"
fname=${fs[0]}
filename=$(echo $fname | awk -F '\_' '{print $3}')
ymd=${filename::8}
echo "ymd:" $ymd
if [ -e $dstpath$ymd ]
then
        echo "exsits"
else
        echo "mkdir"
        mkdir -p $dstpath/$ymd
fi
cp $path/$file $dstpath/$ymd/
done

注意:两个参数应该NOT/结尾:使用/home/user/test而不是/home/user/test/

旧答案: 我写了一个脚本my_copy.sh,它很适合我。

#!/bin/bash
path=$1
dstpath=$2
files=$(ls $path)
for file in $files
do
IFS='.' read -ra fs <<< "$file"
fname=${fs[0]}
ymd=${fname: -8}
cp $path/$file $dstpath/$ymd/
done

用法

$ ls /home/user/test
Test_2G3G_20210601.pdf
Test_2G3G_20210602.csv
$ ls /home/user/dst
20210601
20210602
$ ./my_copy.sh /home/user/test /home/user/dst

【讨论】:

  • 现在文件名略有变化:1. Attach_2G3G_20210523051106_662_0714.txt_ready 2. Attach_2G3G_20210524051406_776_0715.txt_ready
  • @RohitChawla,试试最新的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多