检查文件是否存在且不为空

检查文件是否存在且不为空

我想xx_x__x.log在每周日凌晨 2:30 检查该位置是否存在该文件或文件大小是否为 0。我有一个脚本来检查文件大小并检查它是否存在,但我不知道如何在特定时间检查。

答案1

man bash | less '+/^\s*CONDITIONAL'

-s file
如果文件存在且大小大于零,则为真。

要让脚本在预定义的时间运行,请将代码放入可执行 scipt 并将其加载到 cronjob 中。

我怀疑你可能可以将你的命令放入一个衬垫中并将其加载到 crobtab 中? (我很想知道是否有其他人成功完成了此操作)
但是 cron 命令的问题是

  1. 它们没有连接到终端 - 据我所知{尽管你可能可以检查lsof或其他东西} - 所以当你构建你的 cron 命令时,你不会得到任何关于出了什么问题的调试输出/反馈
  2. 您必须等待一段时间才能测试您的 cron 命令

出于这些原因,我建议将您的命令放入可执行脚本中,以便您可以在编码器友好的环境(即终端)中编写代码,然后当您满意其行为正确时,然后加载命令以将其调用到定时任务

所以说这是你的脚本/tmp/checksize.sh

#!/bin/bash

if [[ -s /tmp/xx_x__x.log  ]]
then 
        printf "\n\n%s\n\n\n" true > /tmp/sizelog.log
else 
        printf "\n\n%s\n\n\n" false > /tmp/sizelog.log
fi

只需运行crontab -e并添加命令

5 0 * * * /tmp/checksize.sh

意思是:# 每天午夜后跑步五分钟

关于把握正确的时机

man 5 crontab

Commands  are  executed by cron(8) when the minute, hour, and month of
       year fields match the current time, and when at least one  of  the  two
       day  fields  (day of month, or day of week) match the current time (see
       ``Note'' below).  cron(8) examines cron entries once every minute.  The
       time and date fields are:

          field      allowed values
          -----      --------------
          minute         0-59
          hour       0-23
          day of month   1-31
          month      1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)

[...]

EXAMPLE CRON FILE
       The following lists an example of a user crontab file.

       # use /bin/bash to run commands, instead of the default /bin/sh
       SHELL=/bin/bash
       # mail any output to `paul', no matter whose crontab this is
       MAILTO=paul
       #
       # run five minutes after midnight, every day
       5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
       # run at 2:15pm on the first of every month -- output mailed to paul
       15 14 1 * *     $HOME/bin/monthly
       # run at 10 pm on weekdays, annoy Joe
       0 22 * * 1-5    mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
       23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
       5 4 * * sun     echo "run at 5 after 4 every sunday"
       # Run on every second Saturday of the month
       0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

答案2

要检查文件是否存在于某个位置,您可以-fif语句中使用测试。

if [ -f "$FILE" ]; then

(正如 the_velour_fog 所说,即使文件为空,表达式也会返回 True)

相关内容