根据文件名将S3中的文件移动到文件夹

时间:2017-04-11 12:04:08

标签: bash shell amazon-s3

我有s3文件夹,其中文件从应用程序暂存。 我需要使用文件名基于指定的文件夹结构移动这些文件。

文件以特定格式命名:

s3://bucketname/staging/file1_YYYY_MM_DD_HH_MM_SS 
s3://bucketname/staging/file1_YYYY_MM_DD_HH_MM_SS

我需要将它们移动到这种格式的s3文件夹:

s3://bucketname/file1/YYYY/MM/DD

我现在有以下代码将staging文件夹中存在的所有文件名存储在文件中。

path=s3://bucketname/staging
count=`s3cmd ls $path | wc -l`
echo $count

if [[ $count -gt 0 ]]; then 
    list_files_to_move_s3=$(s3cmd ls -r $path | awk '{print $4}' > files_in_bucket.txt)
        echo "exists"
else
        echo "do not exist"
fi

我现在需要读取文件名并相应地移动文件。 你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以使用files_in_bucket.txt解析sed的内容以生成所需的输出:

---> cat tests3.txt
s3://bucketname/staging/file1_YYYY_MM_DD_HH_MM_SS 
s3://bucketname/staging/file1_YYYY_MM_DD_HH_MM_SS

---> sed -r "s|^(s3://.*)/.*/(.*)_(.*)_(.*)_(.*)_.*_.*_.*$|\1/\2/\3/\4/\5|g" tests3.txt
s3://bucketname/file1/YYYY/MM/DD
s3://bucketname/file1/YYYY/MM/DD

---> 

它发生了什么,它解析了文件tests3.txt中的每一行,括号内的每一位都保存为"变量" (我不确定sed的正确用语是什么,但你明白了)然后可以在替换字符串中引用\1\2\3,所以它选择了第一个位,包括直到第一个斜线,跳过" staging"位,然后选择文件名的文件和日期部分。

请注意,这假定文件名和您想要的输出的非常标准化的布局。

如果您对此有任何疑问或需要进一步的帮助,请与我们联系。