Bash 在没有find命令的情况下检查文件是否超过30天

Bash 在没有find命令的情况下检查文件是否超过30天,bash,shell,unix,Bash,Shell,Unix,我编写了一个bashshell脚本,其中一部分是使用find命令检查文件是否超过30天,遗憾的是,当我将其上载到主机时,find命令被锁定,因此无法工作 有人知道如何在没有find命令的情况下检查文件是否超过30天吗 我想我需要做一个“ls-a$filename”,然后解析日期字符串,将其转换为unix日期,然后将其与今天的日期进行比较,但我对unix非常生疏 谢谢stat-c%Z filename给出了unixtime中的最后更改时间 stat-c%Y filename如果需要上次修改时间。让

我编写了一个bashshell脚本,其中一部分是使用find命令检查文件是否超过30天,遗憾的是,当我将其上载到主机时,find命令被锁定,因此无法工作

有人知道如何在没有find命令的情况下检查文件是否超过30天吗

我想我需要做一个“ls-a$filename”,然后解析日期字符串,将其转换为unix日期,然后将其与今天的日期进行比较,但我对unix非常生疏


谢谢

stat-c%Z filename
给出了unixtime中的最后更改时间


stat-c%Y filename
如果需要上次修改时间。

ls
输出一个unix时间戳,如下所示:

ls -l --time-style='+%s'
然后从输出中获取时间戳,simlpy计算当前时间与
ls
中的时间戳之间是否有30×24×60×60秒

您可以使用

date '+%s';

如果[$file-ot$timestamp\u file](
-ot
意思是“早于”)。您必须构造适当的文件,例如使用
touch
(使用时间戳选项)。如果这是一项定期任务,您还可以在每次运行时创建时间戳文件,以便下次使用。

好的,我最后就是这样做的

  • 我碰了一个日期为今天——1个月的文件
  • touch-t“$(日期-v-1m+%Y%m%d%H%m)”${DATEFILE}

  • 对这2个文件执行了比以前旧的测试
  • if[${SERVERFILE}-ot${DATEFILE}]


    谢谢大家。

    这在Linux中不起作用:日期中没有-v选项

    t=`date +%Y%m%d%H%M`
    let u=$t-1000000
    touch -t "$u" $DATEFILE
    if [ $SERVERFILE -ot $DATEFILE ]; then
      rm $SERVERFILE
    fi
    

    嗨,谢谢,我不知道那个命令。因为我的机器上没有-c选项,所以格式应该是-f吗?好的,您如何将其与今天的日期进行比较以检查是否>30天?类似于
    $ts1=$(stat-c%Y filename);现在=$(日期'+%s');ts2=$($now-3600*24*30);如果[$ts1-lt$ts2]…
    -但无论如何@Ben Jackson的答案更好。
    ts1=$(stat-c%Y“$path”);现在=$(日期'+%s');ts2=$($now-3600*24*30));如果[$ts1-lt$ts2];然后呼应“年长者”;fi
    FTFYOK谢谢,你知道我如何在30天前得到日期,这样我就可以把它传给touch命令吗?@青蛙爸爸:
    touch-d“$(date-d'30天前”)“30DAYSAGO
    Hi谢谢,但是我不能让这个命令工作,我得到了“ls:invalical option--”Sjoerd的解决方案意味着GNU ls--这显然是海报上没有的。“That”指的是另一个答案。回复的顺序可能会改变,所以这应该作为评论提交——尽管你可能还不能评论。