使用された容量が95%に達すると、ビジボックスから最も古い50 GBのファイルが削除されます。

使用された容量が95%に達すると、ビジボックスから最も古い50 GBのファイルが削除されます。

まあ、ここにコードを要求しましたが、最初はビジボックスと互換性があるように頼んでいませんでした。私のせい。私はLinuxとコーディングに初めて触れました。

コードは次のことを行う必要があります。

ハードドライブの容量が95%に達すると、ディレクトリ(ファイルがあるディレクトリ)から最も古いデータの50 GBが削除されます。

彼らが私に与えたコードはbusyboxとは動作しませんでした:

DIRS="a/ b/"
MAXDELBYTES="53687091200" # 50GB
DELBYTES="0"

find $DIRS -type f -printf "%T@ %s %p\n" | sort -r -n | while read time bytes filename
do
    rm -fv "$filename"
    DELBYTES=$((DELBYTES + bytes))

    if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi
done

うまくいかないもの:

  • -printf(-printに変更)
  • %T@ %s %p\n(何を変更するのか分からない)
  • 他に何がうまくいかないのかわかりません。私はコーディングとLinuxに初めて触れました。

これで、組み込みLinuxシステムで実行できるようにbusyboxに変換する必要があります。また、毎週金曜日に実行するようにcronコマンドを追加する必要があります。

ベストアンサー1

~から忙しい箱実装する探すカスタム出力形式は提供されていないため、書式設定タスクを別のプログラムにアウトソーシングする必要があります :)busybox幸いにもstat注文する。出力形式フィールドは次のように異なります。GNUを探す用途が異なるため、使用すべき記号も異なります。以下のスクリプトでは、合計がから来たと仮定していfindます。statbusybox

DIRS="a/ b/"
MAXDELBYTES="53687091200" # 50GB
DELBYTES="0"

find $DIRS -type f -exec stat -c "%Y %s %n" {} \; | sort -r -n | while read time bytes filename
do
    rm -fv "$filename"
    DELBYTES=$((DELBYTES + bytes))

    if [ $DELBYTES -ge $MAXDELBYTES ]; then break; fi
done

いつものように、各コマンドを使用する前に、そのコマンドの説明をお読みください。その場合、busyboxそのマンページが見つかりませんが、--helpマンページを使用して使用情報を表示できます。

この回避策は、ファイル名に改行文字が含まれていると問題が発生する可能性があることに注意してください。通常のシステムではこれは起こらないでください。たとえば、誰かがシステムに侵入したり、任意のファイルを生成する可能性があるいくつかの脆弱性を悪用した場合に発生する可能性があります。

このような状況で役に立つファイルを誤って削除しないようにするには、まず名前に改行を含むすべてのファイルを見つけて削除する必要があります。これを一覧表示するには、次の手順を実行します。

find / -name "*
*"

(持っているただアスタリスクの間に改行があります。 )その後、これらのファイルがすべて必要ないと確信している場合は、次のいずれかの方法でファイルを削除してください。

find / -name "*
*" -delete

または

find / -name "*
*" -print0 | xargs -0 rm -vf

両方と連携する必要がありますbusybox

おすすめ記事