date: extra operand '+%s'

2019-09-02 06:49发布

问题:

I'm running into a slight error that's not crashing my program per say but it brings it to a crawl. It keeps giving me the error:

date: extra operand '+%s'

It seems to really impact the speed of what it can process which is concerning seeing as I plan on deleting hundreds of thousands of log files. Here is the program in question:

#!/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;

回答1:

You have two format specifiers in this line:

createDate=`date -d "%Y-%m-%d %H:%M" "$createDate" +%s`

Presumably you meant to format $createDate using either:

createDate=`date -d "$createDate" +"%Y-%m-%d %H:%M"`

or:

createDate=`date -d "$createDate" +%s`

My money is on the second one, since you later use a numerical comparison in your if.



回答2:

I changed line 7 to: date +%s -d "$createDate".
This works because it's a GNU date, which doesn't allow you to specify an input format for the date. This fixes the error.