31日以上更新されていないすべてのファイル、フォルダー、およびサブフォルダーを削除するコマンドが必要です。これを試してみました
find . -mindepth 1 -mtime +31 -exec rm -rf "{}" \;
しかし、私がこのような階層を持っている場合
.
├── old_sub_folder1
└── old_sub_folder2
├── old_file
└── old_sub_folder3
└── new_file
ここで、old_*
は古いフォルダ\ファイルであり、new_file
は新しいファイルです。
このコマンドはすべての内容を削除します。 old_sub_folder2
が作成された後、new_file
の日付が更新されなかったためです。
Old_sub_folder2/old_sub_folder3/new_fileを削除しないコマンドが必要です
問題は、rm
コマンドに-r
オプションを追加したことです。これにより、フォルダが空でなくても削除されます。
これは2つのステップで行う必要があります。
古いファイルのみを削除します:
find . -type f -mtime +31 -delete
古いフォルダを削除するには、それらが空の場合、ピーク here を使用して少し調整します。
find . -type d -empty -mtime +31 -delete
find . -type d ! -name . -mtime +31 -exec sh -c '
case $(find "$1" ! -mtime +31 -exec echo x \; -Prune) in
"" ) rm -rf "$1" || echo "Error could not delete folder \"$1\"" ;;
esac
' {} {} \;
現在のディレクトリからfind
を起動し、過去31日間に更新されていないdirectories
のみを確認します。そして、これらの各ディレクトリで、31日以内のものを探し、ダミー文字をエコーし、前方検索を削除します(理想的には、ここで検索を終了する必要があります。 -quit
しかし、それはPOSIX
ではないので、-Prune
)。
次に、このfind
操作の結果を探します。空であることが判明した場合、1つの要素(file/dir/link /etc。)でさえ新しいものではなく、したがってこのdirであることがわかります。削除しても安全です。