我用 PHP 编写了以下内容,但我想知道是否有一种优雅的方法可以在 Linux shell 脚本中执行此操作?基本上删除超过 (n) 天的文件,但保留 (n) 最新的文件,无论其年龄如何。
PHP
foreach (glob("backup/*.db") as $file) {
$a[$file]=date("Y-m-d",filemtime($file));
}
$i=0;
arsort($a);
foreach($a as $file=>$date) {
if ($i++>=10) {
if ($date<=date("Y-m-d",strtotime("-10 days"))) {
unlink($file);
xmessage("PURGED: $file");
}
}
}
我的想法是用“find -mtime +(n) exec rm”删除,但只通过管道传输不在“head -n +(n)”中的文件?但“head -n”似乎并没有达到我的预期。谢谢。
SHELL SCRIPT
find -mtime +10 | ls -t *.DB.tar.gz | head -n -10
使用所有 GNU find、sort、awk 和 xargs 尝试此操作:
find . -type f -printf '%Ts %p\0' |
sort -k1,1nr -sz |
awk -v days=10 -v cnt=10 '
BEGIN { RS=ORS="\0"; secs=systime()-(days*24*60*60) }
(NR>cnt) && ($1>secs) { print gensub(/\S+\s+/,"",1) }
' |
xargs -0 ls --
Change ls
to rm
当您完成测试并确保它为您提供预期的输出时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)