Ich versuche, ein Bash-Skript zu erstellen, um die Anzahl der Dateien auf 50.000 zu begrenzen. Ich möchte das Bash-Skript alle 5 Minuten auf crontab ausführen, damit es die alten Dateien löschen kann, wenn die Anzahl der Dateien das Limit überschreitet. Ich habe Code geschrieben, aber er funktioniert nicht wie vorgesehen. Er löscht alle Dateien, nicht nur die alten. Ich wollte das letzte Element löschen, bis die Anzahl der Dateien unter das Limit fällt. Gibt es eine einfachere Möglichkeit, diesen Vorgang durchzuführen?
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
Antwort1
Ich denke, Ihre FILES-Variable ist falsch. Sie findet alle Dateien, nicht nur die ältesten. Sie könnten so etwas verwenden:
find /mnt/capture/PPO/ -maxdepth 1 -type f -name "*.pcap" -print0 | xargs -0 ls -lt | tail -5 | awk '{print $9}'
Dadurch werden die 5 ältesten Dateien in Ihrem Verzeichnis gefunden. Sie können diese Nummer dann nach Bedarf ändern.