今天我要教你一个 Linux 小魔法:如何创建会自我销毁的文件!这些文件能在指定分钟数后自动消失,或者在特定时间点自我了结。你可能会问:这玩意儿有什么用?比如我最近就在捣鼓一个邮件通知脚本,需要确保一小时内不会重复发信,这时候定时销毁的标记文件就派上用场啦!
打造专属销毁指令
虽然 Linux 没有现成的自毁文件指令,但咱们可以自己造一个!比你想的简单多了~
先创建这个脚本文件,命名为 sdelete.sh
:
#!/bin/bash# 检查参数数量对不对
if [ "$#" -ne 2 ]; thenecho "用法:$0 <完整文件路径> <销毁时间>"echo "示例:$0 /你的/文件路径 'now + 5 minutes'"echo "示例:$0 /你的/文件路径 '明天中午12:30'"exit 1
fi# 获取参数
filename=$1
time=$2# 必须用绝对路径,防止误删
if [[ "$filename" != /* ]]; thenecho "错误:必须使用完整文件路径"exit 1
fi# 创建文件
touch "$filename"
if [ $? -eq 0 ]; thenecho "文件 '$filename' 已生成"
elseecho "创建文件 '$filename' 失败"exit 1
fi# 设置定时销毁(Linux 的 at 命令真香)
echo "rm \"$filename\"" | at "$time"
if [ $? -eq 0 ]; thenecho "文件 '$filename' 已预约在 $time 销毁"
elseecho "定时任务设置失败,检查你的 at 命令安装了吗?"exit 1
fi
别忘了赋予执行权限:
chmod +x sdelete.sh
实战演练
场景一:1分钟后自动消失
$ ./sdelete.sh ~/hello.txt 'now +1 minute'
文件 '/home/administrator/hello.txt' 已生成
warning: commands will be executed using /bin/sh
job 6 at Thu Jul 25 17:18:00 2024
文件 '/home/administrator/hello.txt' 已预约在 now +1 minute 销毁$ ls -l | grep -i hello
-rw-rw-r-- 1 administrator administrator 0 Jul 25 17:17 hello.txt
1分钟后检查,文件果然人间蒸发了!
场景二:定点清除
想精确到具体时间?比如下午5:50:
$ ./sdelete.sh ~/hello.txt '17:50'
文件 '/home/administrator/hello.txt' 已生成
warning: commands will be executed using /bin/sh
job 7 at Thu Jul 25 17:50:00 2024
文件 '/home/administrator/hello.txt' 已预约在 17:50 销毁。
原理揭秘
这个脚本的核心是 Linux 的 at
定时任务命令。这个神器可以让你像订外卖一样预定命令的执行时间,几个经典用法:
延迟执行
echo "ls -l /tmp" | at now + 1 minute
精准定时
echo "echo 'Hello, World!'" | at 10:30 AM
跨年彩蛋
echo "shutdown -h now" | at 11:59 PM 12/31/2024
最后唠叨两句
虽然自删除文件可能不算什么杀手级功能,但希望这篇短文能让你会心一笑!下次当你想给脚本加个「冷却时间」,或者需要创建临时标记文件时,记得这个实用的小技巧哦~ (悄悄说:用来整蛊同事也是极好的)