0

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

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

目标是清除缓存目录。

4

3 回答 3

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 中的所有常规文件。

于 2013-01-30T10:32:55.753 回答
1

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

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

这将按访问时间对目录中的所有文件进行排序,最近最少访问到底部。Tail 省略了前 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$$
于 2013-09-30T16:33:29.393 回答
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 -1rm

于 2013-07-23T20:59:02.777 回答