![如何保持文件夹中的文件数量小于限制](https://linux22.com/image/1395385/%E5%A6%82%E4%BD%95%E4%BF%9D%E6%8C%81%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E6%95%B0%E9%87%8F%E5%B0%8F%E4%BA%8E%E9%99%90%E5%88%B6.png)
我正在尝试创建一个 bash 脚本,将文件数量限制为 50000。我想每 5 分钟在 crontab 上运行一次 bash 脚本,这样当文件数量超出限制时,它就可以继续删除旧文件。我已经编写了代码,但它没有按预期工作。它删除了所有文件,而不仅仅是旧文件。我打算删除最后一个元素,直到文件数量低于限制。有没有更简单的方法来完成这个过程?
LIMIT=50000
NUMBER=$(find /mnt/capture/PPO/ -maxdepth 1 -name "*.pcap" wc -l)
if [[ $NUMBER -gt $LIMIT ]] #if number greater than limit
then
FILES=$(find /mnt/capture/PPO/ -maxdepth 1 -name "*.pcap")
for f in "${FILES[@]}"
do
rm $FILES[$NUMBER-$f]
done
#delete the originals
fi
答案1
我认为你的 FILES 变量是错误的。它会查找所有文件,而不仅仅是最旧的文件。你可以使用类似这样的方法:
find /mnt/capture/PPO/ -maxdepth 1 -type f -name "*.pcap" -print0 | xargs -0 ls -lt | tail -5 | awk '{print $9}'
这将查找目录中最旧的 5 个文件。然后您可以根据需要更改该数字。