2017-04-11 96 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等。因此,它挑選出第一位,包括直到第一個斜槓,跳過「暫存」位,然後選取文件名和日期部分。

請注意,這假設文件名和您想要的輸出非常標準化的佈局。

讓我知道如果您有任何問題或需要進一步的幫助。

相關問題