2017-04-11 136 views
0

我有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 

我现在下面的代码来存储所有的文件名存在于临时文件夹中的文件中。

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 

我现在需要读取文件名并相应地移动文件。 你可以请帮忙。

回答

0

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

---> 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等。因此,它挑选出第一位,包括直到第一个斜杠,跳过“暂存”位,然后选取文件名和日期部分。

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

让我知道如果您有任何问题或需要进一步的帮助。

相关问题