大規模なディレクトリ構造を繰り返し、X日以内にファイルを削除します。

大規模なディレクトリ構造を繰り返し、X日以内にファイルを削除します。

最初のLinuxコーディング作業です。

私はサーバー上のすべてのフォルダを巡回し、X日(約20日)が経過したすべてのファイルを削除するタイムアウトジョブのスクリプトを作成するように求められました。

私の家Redhatコンピュータで以下のコードをテストしました。

もちろん、このコードを実際に使用する前には多くの恐怖がありました。以下のコードはうまく機能しますが、「X」日以内にファイル(ディレクトリではない)のみを削除するためにも必要です。

システムの何百ものディレクトリと何千ものファイルをダウンロードまたは変更することは不可能です。初めてこのプログラムを実行したときに、顧客はファイルを私たちのサーバーに置いて忘れてしまったので、10,000以上のファイルが削除されると予想しました。 (これは彼らを目覚めさせるでしょう!)

5行目 "elif [ -f "$i" を変更してみました。-a -m時間+21];Then" - ファイルの削除(rm -i "$1")

動作しません。 「[:mtime:binary 演算子が必要です」と表示されます。

別のelifステートメントが必要ですか、または選択基準(「X」日より古いファイルのみ)を1行で機能させることができますか?

パスワード:

#!/bin/bash 

print_folder_recurse() {
    for i in "$1"/*; do
        if [ -d "$i" ]; then
            print_folder_recurse "$i"
        elif [ -f  "$i" ]; then
            rm -i  $i #(put the -i in there for #testing, it will be removed)
        fi    
    done
}

パス「/go/to/your/happy/place」

echo "Delete path: $path"
print_folder_recurse $path

ありがとうございます。

答え1

find /your/directory -type f -daystart -mtime +20 -delete

-deleteテストを実行するには削除してください。

関連情報