使用部分文件名添加为字段/列

时间:2013-07-23 11:09:19

标签: bash for-loop hadoop filenames hdfs

我每天将5个文件(通过wget)保存到/ tmp,以便在bash脚本中加载到hdfs。

donaldDuck-2013-07-20.zip
mickeyMouse-2013-07-20.zip
goofyGoof-2013-07-20.zip
plutoStar-2013-07-20.zip
bigBadWolf-2013-07-20.zip

文件名的日期部分是动态的。

如何告诉hadoop加载5个文件中的每一个?我听说过循环。

for file in /tmp/*; do
echo "Running ${file##*/} ...."
done

我是否用“hadoop fs -put ...”语句替换回声线?它会是什么样子?

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

#!/bin/bash

when=$(date "+%Y-%m-%d") #output like 2013-07-23
names=(donaldDuck mickeyMouse goofyGoof plutoStar bigBadWolf)

for file in "${names[@]}"
do
        ls -l $file-$when.zip #output like donaldDuck-2013-07-23.zip
done

解释

名称存储在数组$names中。因此,我们可以使用for file in "${names[@]}"循环遍历它。与此同时,我们将日期存储在$when中,以便格式与$file-$when.zip匹配。

答案 1 :(得分:1)

以下是我要做的事情:

hdfsdir=/path/to/hdfs/output/dir
datethru=`date "+%Y-%m-%d" --date="3 days ago"` # replace by how many days ago you want
for i in `ls /tmp/*-$datethru.zip`; do
    hadoop fs -put $i $hdfsdir
done

这将基本上获取目录中包含特定日期并以.zip结尾的所有文件,并将每个文件上传到hdfs中的特定目录。