ファイル数(1時間前のファイル)を計算して1000個を超えると、すべてのファイルを削除するシェルスクリプトを作成したいと思います。
読み取りと削除のためにパテで次のコマンドを使用します。
計算のため:
ls /tmp/ | grep 'ci_session*' | wc -l
ファイル削除の場合:
cd /tmp/
find . -name "ci_session*" -exec rm {} \;
#更新:削除するには1時間以上経過したファイルのみを削除したいと思います。
ここでは、ファイルの総数が1000を超える場合は、条件を追加してから削除コマンドを呼び出したいと思います。
ベストアンサー1
あなたの質問は、「ファイル数をどのように計算し、1000を超える場合は1時間以上古いファイルを削除しますか?」と解釈されます。
一致する名前を数えて/tmp/ci_session*
1000を超える場合は、次の操作を実行してください。
set -- /tmp/ci_session*
if [ "$#" -gt 1000 ]; then
# something
fi
これにより、位置パラメータがパターンと一致する名前に設定されます。その後、特殊変数には$#
位置引数の数が含まれます。
/tmp/ci_session*
最後に変更された時間が1時間以上の場合は、一致するファイルを削除します。
find /tmp -maxdepth 1 -type f -name 'ci_session*' -mmin +60 -delete
総合してみると:
#!/bin/sh
set -- /tmp/ci_session*
if [ "$#" -gt 1000 ]; then
find /tmp -maxdepth 1 -type f -name 'ci_session*' -mmin +60 -delete
fi
ここで注目すべき唯一のことはカウントですどのパターンと一致する名前(ディレクトリ名がある場合でも)、find
コマンドは削除を次に制限します。一般ファイル(つまりディレクトリではありません)