BASH 脚本-表达式中的语法错误

BASH 脚本-表达式中的语法错误

我遇到了一个我无法弄清楚的问题。我有一个 BASH 脚本,它遍历目录并将当前日期与文件的文件修改时间进行比较。如果超过一定时间,文件将被压缩。我收到以下错误:

./serversync.sh: line 87: 1324308130-1323116622
1323581504: syntax error in expression (error token is "1323581504")

此时正在运行的代码部分如下:

#If the file doesn't have a matching .gz file, compress it
                do if [ ! -e ${FILE}.gz ]
                        then
                                echo "Matching Gzip doesn't exist for $FILE"
                                echo Checking to see if compression needed
#test to make sure that the file is 30 days old, and if it is, gzip
                                FILEMTIME=$(stat -c %Y $FILE)
                                FILEAGE=$(($DATE-$FILEMTIME))
                                echo fileage is $FILEAGE
                                if [ $FILEAGE -gt $COMPRESSWINDOWSTART -a $FILEAGE -lt $COMPRESSWINDOWEND ]
                                        then
                                        echo $FILEAGE is greater than $COMPRESSWINDOWSTART and less than $COMPRESSWINDOWEND
                                        echo Compressing $FILE
                                        gzip $FILE
                                fi
                fi

第 87 行如下:

                            FILEAGE=$(($DATE-$FILEMTIME))

如果有人能提供为什么会发生这种情况的想法,我将不胜感激!

答案1

尝试

FILEAGE=$DATE-$FILEMTIME

您要做的是寻找一个名为“1324308130-1323116622”的变量,而不是尝试评估表达式。

答案2

错误最终与其中一个文件有关。脚本创建了一个目录,该目录在本地系统上创建文件。它创建了一个格式为 alert_*/ 的目录,这弄乱了 stat 命令。谢谢大家的关注!

答案3

你为什么不利用find这个呢?

find /path/to/searchdirectory -type f -mtime +30 -print0 | xargs -n 1 -0 gzip 

将是您的任务的最小解决方案,无需错误检查。

相关内容