![フォルダ内のファイル数を制限未満に保つ方法](https://rvso.com/image/1395385/%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%95%B0%E3%82%92%E5%88%B6%E9%99%90%E6%9C%AA%E6%BA%80%E3%81%AB%E4%BF%9D%E3%81%A4%E6%96%B9%E6%B3%95.png)
ファイル数を 50000 に制限する bash スクリプトを作成しようとしています。crontab で 5 分ごとに 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 つのファイルが検索されます。その後、必要に応じてその数を変更できます。