用于移动超过 24 小时的目录的 Cron 作业

用于移动超过 24 小时的目录的 Cron 作业

嗯,我想做的是

  1. cron 应该每小时左右运行一次
  2. 它应该移动目录在文件夹 /disk1/data/ 中超过 24 小时到 /disk2/data/
  3. 移动的目录应包含其中的所有数据(文件/文件夹)

我是 cron 作业的新手,所以我完全不知道从哪里开始。谢谢您的帮助!

答案1

目录的年龄到底是什么意思?自其 inode 创建以来的时间?我建议您使用它find来识别要移动的目录。例如:

#!/bin/bash
res=0
cd /disk1/data/
find -type d -ctime +1 -print0 -prune | \
while IFS= read -r -d '' i; do
    if [[ ${i} == */* ]]; then                    # need to ensure subdir exists
        if ! mkdir -p "/disk2/data/${i%/*}; then  # error creating dir?
            res=1
            continue
        fi
    fi
    rm -rf "/disk2/data/${i}"                     # make sure target does not exist
    mv "${i}" "/disk2/data/${i}"                  # move stuff
done
exit ${res}

如果允许其他人写disk2,那么这个代码可能如果有人以足够快的速度创建正确的符号链接,则容易受到某些类型的符号链接攻击。不确定。

我建议你将脚本写入某个文件并从 cronjob 中执行。你可以使用 创建一个 conjob crontab -e(确保已EDITOR正确设置环境变量),遵循 中描述的格式man crontab

答案2

-ctime请注意find不是意思是创建时间,但“inode改变时间”。st_ctime通过写入或设置 inode 信息(所有者、组、链接数、模式等)可以更改该字段。对于目录,它还将反映上次在该目录中创建或删除文件(或子目录)的时间。因此,请考虑这是否find -type d -ctime +1真的是您需要的选项。

相关内容