关于如何在linux上删除超过x分钟/小时/天的文件有很多问题,但没有人能达到秒分辨率。
我找到了这个解决方案:
for file in `ls -ltr --time-style=+%s | awk '{now=systime(); del_time=now-30; if($6<del_time && $5=="0") print $7}'` ;do
rm -f $file >/dev/null 2>&1
done
但systime()
awk
&#34;函数systime从未定义&#34;
但是在gawk
,我无法在Ubuntu 13.xx上安装(并且真的不想安装任何额外的软件)。
答案 0 :(得分:16)
解析ls
的输出始终是一种糟糕的方法。特别是当GNU Findutils的find
能够自己完成所有工作时:
$ find -not -newermt '-30 seconds' -delete
答案 1 :(得分:-1)
我找到的解决方案是替换systime()
命令,并像这样使用date +%s
:
for file in $(ls -ltr --time-style=+%s | awk '{cmd="date +%s"; cmd|getline now; close(cmd);del_time=now-30; if($6<del_time) print $7}') ;do
rm -f $file >/dev/null 2>&1
done
诀窍是捕获date +%s
内awk
的输出,使用cmd="date +%s"; cmd|getline now; close(cmd)
是我找到的唯一(实际上是第一种)方式。
编辑:我更改了反引号括号,正如@Jotne
所推荐的那样