使用bash检查包裹是否早于24小时

时间:2018-10-05 10:37:23

标签: bash shell

我想检查我的上一个文件是否早于24小时。 (django中的项目) 我的目录中有许多zip软件包,因此我必须用这部分代码ls -1 | sort -n | tail -n1“过滤”最后一个。

.sh文件中的代码:

#!/bin/bash

file="$HOME/path_directory ls -1 | sort -n | tail -n1"
current=`date +%s`;
last_modified=`stat -c "%Y" $file`;


if [ $(($current-$last_modified)) -gt 86400 ]; then
     echo "File is older that 24 hours" | mailx noreply@address -s "Older than 24 hours" me@mailmail.com
else
     echo "File is up to date.";
fi;

这是我得到的错误:

stat: invalid option -- '1'
Try 'stat --help' for more information.
/path_directory/imported_file.sh: line 9: 1538734802-: syntax error: operand expected (error token is "-")

如果有人做了类似的事情,请提示。

3 个答案:

答案 0 :(得分:4)

您可以获得在1440分钟(86400秒)之前已被修改的目录中的文件列表,可以为此使用find

find -maxdepth 1 -mmin +1440

因此它将选择目录中的所有文件(无子目录),更改时间以分钟为单位,早于1440。

+中的+1440很重要,因为否则您将获得完全 1440分钟未修改的文件。

您还可以使用-mtime指定天数:

find -maxdepth 1 -mtime +1

如果需要所有文件(在此目录和子目录中),则可以删除-maxdepth 1

如果只想包含文件等,则可以添加-type f。有关更多标志和(过滤)选项的信息,请阅读manpage of find

答案 1 :(得分:3)

我建议您尝试一下:

if test "`find file -mtime +1`"

但是如果您坚持要解决,可以将其更改为以下内容:

#!/bin/bash
file="$HOME/path_directory ls -1 | sort -n | tail -n1"
current=$(date +%s);
last_modified=$(stat -c "%Y" $file);

if [ $((current - last_modified)) -gt 86400 ]; then
     echo "File is older that 24 hours" | mailx noreply@address -s "Older than 24 hours" me@mailmail.com
else
     echo "File is up to date.";
fi;

答案 2 :(得分:2)

文件变量格式不正确,我想你想要类似的东西

file=`find $HOME/path_directory | sort -n | tail -n1`

file=$( find $HOME/path_directory | sort -n | tail -n1)

如果您喜欢现代方式