我正在尝试创建一个 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 个文件。然后您可以根据需要更改该数字。