Linux shell脚本用于计算文件并在超过数字时删除

时间:2013-01-30 10:19:37

标签: linux shell

我想运行一个cron作业,当它超过一个数字时删除目录中的所有文件。

例如,当它变为1000个文件时,则删除该目录中的所有文件。

目标是清除缓存目录。

3 个答案:

答案 0 :(得分:2)

#!/bin/bash
CACHE_DIR=/home/cache
if [[ `ls -al $CACHE_DIR | wc -l` -ge 1000 ]] ; then 
     find $CACHE_DIR -t file -exec rm -f {} \; 
fi;

如果文件数等于且大于1000,则删除/ home / cache中的所有常规文件。

答案 1 :(得分:0)

再次,xargs救援!

(echo ; ls -1 ) | head -n -1000 | head -n 1 | xargs -r rm -f *

第一部分创建目录中所有文件的列表,但前面有一个空行

第二,保留除最后1000行之外的所有行。如果少于1000个文件,则不保留任何内容!

第三,只保留第一行 - 这是空行或没有(如果少于1000个文件)

最后,如果至少有一行输入(那是rm -f *选项),则仅运行命令-r

编辑:

好的,显然*在脚本中不起作用。因此,使用fedorqui的想法,您可以使用:

(echo ; ls -1 ) | head -n -1000 | head -n 1 | xargs -r ls -1 | xargs rm -f

因此,只有当文件超过1000个(并将输出转换为rm -f *)时,才会执行ls -1而不是rm

答案 2 :(得分:0)

典型的最近最少使用(LRU)缓存只删除最近未使用的旧条目,并保留最近使用的条目,而不是删除所有文件。

ls -ut1 | tail -n+1001 | xargs -n 50 rm 

这将按照访问时间对目录中的所有文件进行排序,最近最少访问到底部。尾部省略了前1000并将其余部分发送到删除了em的'xargs rm'。如果文件名很长并且导致单个命令长度超过ARG_MAX,则可能需要xargs的“-n 50”选项。

如果文件少于1000个,那么'xargs rm'会抱怨。要清除它;

ls -ut1 | tail -n+1001 > /tmp/files$$
if [[ `cat /tmp/files$$ | wc -l` -ge 1001 ]] ; then
  while read line ; do
    rm "$line"
  done < /tmp/files$$
fi
rm /tmp/file$$