12 scripts delete automation files directory
我的机器上有一个目录,将其视为我自己的tmp目录,但它在我的~目录中。我想让我的系统每 3 小时删除一次该目录中的所有文件(尽管保持任何目录结构不变,但仍然递归地删除所有目录级别中的所有文件)该目录中超过一天的文件。
我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10,可以这样做吗?如果是这样,如何?我希望这是完全自动化的,不需要用户交互。这应该是我登录时自动启动的东西,所以我不需要在每次启动时都运行一些东西。
hee*_*ayl 21
使用find:
find ~/tmp -type f -mtime +0 -delete
Run Code Online (Sandbox Code Playgroud)
~/tmp 是要递归搜索的目录,相应地更改它
-type f 将只查找文件
-mtime +0 如果文件最后一次修改是在一天或更长时间之前,它将匹配一个文件
-delete 只会删除匹配的文件
这里的问题是-mtime +0,大多数人可能会想到使用-mtime +1但find在计算天数时会忽略任何小数时间。因此,-mtime +1如果上次修改至少在 2 天前进行,则将匹配文件。
引用man find,-mtime具有与以下相同的时间约定-atime:
-atime n
文件最后一次访问是在 n*24 小时前。当 find 计算出该文件在多少 24 小时前被上次访问时,任何小数部分都将被忽略,因此要匹配 -atime +1,文件必须至少在两天前被访问过。
另请注意,如果您想要精确度,您应该查看以分钟为单位指示时间的-mmin选项find。
要在 3 小时后定期运行它,您可以添加一个cron条目。
运行crontab -e并添加:
00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete
Run Code Online (Sandbox Code Playgroud)
使用zsh删除文件:
rm ~/tmp/**/*(.-m+0)
Run Code Online (Sandbox Code Playgroud)
添加到cron:
00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'
Run Code Online (Sandbox Code Playgroud)
小智 6
您应该能够删除所有早于 1 天的文件/home/username/directory及其下面的所有目录:
find /home/username/directory -type f -mtime +1 -delete
Run Code Online (Sandbox Code Playgroud)
并每三个小时安排该命令将其设置为 cron 作业:
crontab -e
Run Code Online (Sandbox Code Playgroud)
然后在 crontab 里面:
0 */3 * * * find /home/username/directory -type f -mtime +1 -delete
Run Code Online (Sandbox Code Playgroud)
它在每小时(即分钟 0)每三个小时运行一次您的命令,所以 3:00 am、6:00 am 等。
去cron和crontab manpages了解更多关于它们的信息。