ファイルをカウントしてから最も古いファイルを削除するスクリプト
1. 概要
このチュートリアルでは、ディレクトリ内のファイルをカウントするbashスクリプトを作成し、特定の数よりも多くのファイルがある場合は、最も古いファイルを削除します。
2. 環境
複数のファイルを含むディレクトリがあるとしましょう。
$ ls
files
$ ls -t ./files
file15.txt file13.txt file11.txt file9.txt file7.txt file5.txt file3.txt file1.txt
file14.txt file12.txt file10.txt file8.txt file6.txt file4.txt file2.txt
-t オプションは、報告されたファイルを変更時刻でソートするため、最新のファイルが最初に表示されます。 ご覧のとおり、 file15.txt が最新のファイルで、file1.txtが最も古いファイルです。
3. スクリプト
それでは、スクリプトを作成しましょう。 引数としてファイル数の制限を受け取る必要があります。
#!/bin/bash
# Print usage if requested.
if [[ $1 == "--help" || $1 == "-h" ]]
then
echo "Usage: $0 [files limit]"
exit 0
fi
# The script receives the limit as an argument.
limit=$1
number_of_files=$(ls ./files | wc -l)
if [ $number_of_files -gt $limit ]
then
# There are more files than the limit
# So we need to remove the older ones.
cd files
ls -t | tail --lines=+$(expr $limit + 1) | xargs -d '\n' rm
fi
上記のコードでは、 wc -l は、改行文字 \ n を区切り文字として使用して、 ./files内のファイルをカウントします。
ls -t は、変更時刻ごとにファイルを一覧表示し、最新のファイルを最初に配置します。
tail –lines = + $(expr $ limit + 1)は、制限の直後に来るファイルを出力します。 したがって、削除する必要のあるすべてのファイルができました。
最後に、 xargs -d’\ n’は、改行文字を区切り文字として使用して、各ファイルを引数として rm に渡し、それらを削除します。
4. スクリプトの実行
スクリプトを保存した後、実行する前にスクリプトを実行可能にする必要があります。
$ ls
count_then_remove.sh files
$ chmod u+x count_then_remove.sh
chmod u + x は、スクリプトを実行可能にします。 それを実行してみましょう:
$ ./count_then_remove.sh 5
$ ls -t ./files
file15.txt file14.txt file13.txt file12.txt file11.txt
スクリプトが古いファイルを削除したことがわかります。 その結果、5つのファイルが残っています。
5. 結論
この短い記事では、ディレクトリ内のファイル数を所定の数以下に保つスクリプトを作成する方法を学びました。