Bash 移动已过期x分钟的文件

Bash 移动已过期x分钟的文件,bash,Bash,我有一个循环过程,运行该过程来检查文件是否已老化x分钟。在它已经存在的情况下,我将文件移到一个新目录 但是,我注意到文件正在被立即移动。你知道是什么导致了这个问题吗 # Expected age time = 10 minutes EXPECTED_AGE_TIME=10 # How long the file has actually aged ACTUAL_AGE_TIME=$((`date +%s` - `stat -L --format %Y $FILE`)) if [[ $ACTUA

我有一个循环过程,运行该过程来检查文件是否已老化x分钟。在它已经存在的情况下,我将文件移到一个新目录

但是,我注意到文件正在被立即移动。你知道是什么导致了这个问题吗

# Expected age time = 10 minutes
EXPECTED_AGE_TIME=10
# How long the file has actually aged
ACTUAL_AGE_TIME=$((`date +%s` - `stat -L --format %Y $FILE`))

if [[ $ACTUAL_AGE_TIME > $((EXPECTED_AGE_TIME * 60)) ]]; then
   mv $FILE ./loaded/$FILE
fi

Bash内置的文件日期比较操作符
-ot
可以检查文件的相对年龄

请参见帮助测试:

如果FILE1比FILE2新(根据修改日期),则FILE1-ntFILE2为True

FILE1-otFILE2如果FILE1早于FILE2,则为True

#/usr/bin/env bash
declare--TIME\u文件
TIME_FILE=“$(mktemp)”|退出1#无法创建临时文件
trap'rm--“$TIME_FILE”'EXIT#退出时清除临时文件
声明-我期望年龄时间=10
#将reference$time\u文件的时间设置为$EXPECTED\u AGE\u time minutes
touch--日期“$((预期时间))分钟前”$TIME\u文件
#如果$FILE早于$TIME\u FILE,则将其移动
[[“$FILE”-ot“$TIME_FILE”]]和&mv--“$FILE”。/loaded/$FILE”

可以通过Bash内置的文件日期比较操作符
-ot
检查文件的相对年龄

请参见帮助测试:

如果FILE1比FILE2新(根据修改日期),则FILE1-ntFILE2为True

FILE1-otFILE2如果FILE1早于FILE2,则为True

#/usr/bin/env bash
declare--TIME\u文件
TIME_FILE=“$(mktemp)”|退出1#无法创建临时文件
trap'rm--“$TIME_FILE”'EXIT#退出时清除临时文件
声明-我期望年龄时间=10
#将reference$time\u文件的时间设置为$EXPECTED\u AGE\u time minutes
touch--日期“$((预期时间))分钟前”$TIME\u文件
#如果$FILE早于$TIME\u FILE,则将其移动
[[“$FILE”-ot“$TIME_FILE”]]和&mv--“$FILE”。/loaded/$FILE”

基于注释构建,以在上面的注释中使用“查找”。将查找应用于单个查找:

find $FILE -mmin +10 -exec mv '{}' ../loaded/ \;

这将消除杂乱无章的日期数学、日期格式等问题,

基于注释构建,以便在上面的注释中使用find。将查找应用于单个查找:

find $FILE -mmin +10 -exec mv '{}' ../loaded/ \;

这将消除混乱的日期数学、日期格式等问题。

您可以使用
查找
?像这样:
find-mmin+10-f型
。然后只处理这些文件。怎么样
find-mmin+10-名称为“myfile.log”
?谢谢,但我一次只需要对一个文件运行检查。如果($ACTUAL_AGE_TIME>$($EXPECTED_AGE_TIME*60)),您是否可以尝试使用
if($ACTUAL_AGE_TIME>$);然后。。。fi
?如果在比较之前
echo
,则
ACTUAL_AGE_TIME
EXPECTED_AGE_TIME
的值是多少?是否可以使用
find
?像这样:
find-mmin+10-f型
。然后只处理这些文件。怎么样
find-mmin+10-名称为“myfile.log”
?谢谢,但我一次只需要对一个文件运行检查。如果($ACTUAL_AGE_TIME>$($EXPECTED_AGE_TIME*60)),您是否可以尝试使用
if($ACTUAL_AGE_TIME>$);然后。。。fi
?如果在比较之前
echo
,那么
ACTUAL\u AGE\u TIME
EXPECTED\u AGE\u TIME
的值是什么?声明--做什么?@stephanmg它声明了一个未设置任何标志的变量。(
--
是标准的选项标志终止符,表示更多的命令参数不是选项标志,并防止从变量参数内容中注入选项标志。)
声明--
做什么?@stephanmg它声明了一个未设置任何标志的变量。(
--
是标准的选项标志终止符,指示更多的命令参数不是选项标志,并防止从变量参数内容中注入选项标志)这实际上会搜索吗?因为,如果目录包含许多文件,结果将需要一段时间。没有递归目录扫描,因为$File被指定为起始点。仅当起始点是目录时才执行搜索。但是如果我指定了
-name
$FILE,我将调用scan。如果我错了,请纠正我。简短回答:否。长回答:每次您引用文件(即使在
cp a b
中),当前文件夹中都会有一个“扫描”来定位“a”和“b”。这适用于
open
stat
和许多调用。与“目录扫描”(通常是opendir/readdir)相比,这种访问速度要快得多(并且经过优化),这通常会导致大量重复的统计。快速“证明”:运行“strace-c”,并将“find file-mtime-100”与“find”进行比较-在一个包含大量文件的文件夹中命名file-mtime 100。@stephanmg但是对于一个单独的问题来说,这是一个很好的主题。这真的会搜索吗?因为,如果目录包含许多文件,结果将需要一段时间。没有递归目录扫描,因为$File被指定为起始点。仅当起始点是目录时才执行搜索。但是如果我指定了
-name
$FILE,我将调用scan。如果我错了,请纠正我。简短回答:否。长回答:每次您引用文件(即使在
cp a b
中),当前文件夹中都会有一个“扫描”来定位“a”和“b”。这适用于
open
stat
和许多调用。与“目录扫描”(通常是opendir/readdir)相比,这种访问速度要快得多(并且经过优化),这通常会导致大量重复的统计。快速“证明”:运行“strace-c”,并将“find file-mtime-100”与“find”进行比较-在一个包含大量文件的文件夹中命名file-mtime 100。@stephanmg但这是一个单独问题的好主题。