【发布时间】:2018-04-12 13:59:23
【问题描述】:
我遇到了一个小错误,虽然我的程序并没有崩溃,但它却让它陷入了困境。它一直给我错误:
date: extra operand '+%s'
当我计划删除数十万个日志文件时,这似乎真的影响了它可以处理的速度。这是有问题的程序:
#!/bin/bash
# Usage: ./s3DeleteByDate "bucketname" "2m"
aws s3 ls s3://$1 | grep " DIR " -v | while read -r line;
do
createDate=$(echo "$line" | awk '{print $1" "$2}')
createDate=`date -d "%Y-%m-%d %H:%M" "$createDate" +%s`
olderThan=`date -d $2 +%s`
if [[ $createDate -lt $olderThan ]]
then
fileName=`echo $line|awk {'print $4'}`
if [[ $fileName != "" ]]
then
aws s3 rm s3://$1"$fileName" --exclude "*" --include "*.tmp"
fi
fi
done;
【问题讨论】:
-
将
set -euo pipefail添加到脚本的开头,这样您就可以对错误做出适当的反应。然后调查$createDate参数中的什么导致问题。 -
@Velkan
set -e并不总是一个好主意(例如,参见 here)。更好的是检查每个命令的预期结果 -
我昨晚回答了这个问题:
date +%s -d "$createDate"。您正在使用 GNUdate,它不允许您为日期指定 输入 格式。 -
我一定错过了。什么是替代方案?我认为 AWS 在 CRON 中。抱歉,我还在上 Linux 课程,但这是为了工作。
-
"$createDate"是您想要格式化的日期吗?然后在它前面放一个-d。
标签: linux bash ubuntu amazon-s3