特定の条件(ファイル数、ファイル期間)からファイルを削除する

特定の条件(ファイル数、ファイル期間)からファイルを削除する

ファイル数(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コマンドは削除を次に制限します。一般ファイル(つまりディレクトリではありません)

おすすめ記事