嗯,我想做的是
- cron 应该每小时左右运行一次
- 它应该移动这 目录在文件夹 /disk1/data/ 中超过 24 小时到 /disk2/data/
- 移动的目录应包含其中的所有数据(文件/文件夹)
我是 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
真的是您需要的选项。