我有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
我现在需要读取文件名并相应地移动文件。 你能帮忙吗?
答案 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"位,然后选择文件名的文件和日期部分。
请注意,这假定文件名和您想要的输出的非常标准化的布局。
如果您对此有任何疑问或需要进一步的帮助,请与我们联系。