我遇到了一个我无法弄清楚的问题。我有一个 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
将是您的任务的最小解决方案,无需错误检查。