如何删除shell上超过x秒(不是几天,几小时或几分钟)的文件?

时间:2014-07-23 11:01:37

标签: bash awk

关于如何在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上安装(并且真的不想安装任何额外的软件)。

2 个答案:

答案 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 +%sawk的输出,使用cmd="date +%s"; cmd|getline now; close(cmd)是我找到的唯一(实际上是第一种)方式。

编辑:我更改了反引号括号,正如@Jotne

所推荐的那样