如何使用shell脚本(bash)在s3存储桶中列出文件(带空格)?

时间:2018-02-09 07:55:17

标签: bash shell amazon-web-services amazon-s3

我列出了s3存储桶中的所有文件并将其写入文本文件中。例如,我的存储桶包含以下文件列表:

text.zip
fixed.zip
hello.zip
good test.zip

我使用以下代码:

fileList=$(aws s3 ls s3://$inputBucketName/ | awk '{print $4}')
if [ ! -z "$fileList" ]
then
    $AWS_CLI s3 ls s3://$inputBucketName/ | awk '{print $1,$2,$4}' > s3op.txt
    sort -k1,1 -k2 s3op.txt > s3op_srt.txt
    awk '{print $3}' s3op_srt.txt > filesOrder.txt
fi
cat filesOrder.txt;

此后,当我从我创建的文件中迭代文件时(我将在循环结束时删除S3中的文件,因此不会再次处理该文件):

fileName=`head -1 filesOrder.txt`

文件如下所示:

text.zip
fixed.zip
hello.zip
good

所以问题是,列表无法正确列出带空格的文件。

由于文件名返回为“good”而不是“good test.zip”,因此无法从S3中删除该文件。

预期结果

text.zip
fixed.zip
hello.zip
good test.zip

我使用以下命令删除S3中的文件:

aws s3 rm s3://$inputBucketName/$fileName

1 个答案:

答案 0 :(得分:0)

将完整文件路径放在双引号下。 例如:

aws s3 rm "s3://test-bucket/good test.zip"

在你的情况下,它将是:

aws s3 rm "s3://$inputBucketName/$fileName"

这里即使fileName有空格,也会被删除。