So halten Sie die Anzahl der Dateien in einem Ordner unter einem Grenzwert

So halten Sie die Anzahl der Dateien in einem Ordner unter einem Grenzwert

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.

verwandte Informationen