開発ユニットで1週間より古いファイルを見つけて削除する必要があります。このユニットで使用できるユーティリティの数は限られています。 -mtime
find
の述語は使用できません。この場合、x日より古いすべてのファイルを確認するにはどうすればよいですか?
-mtime
は、find
の標準的な述語です(-delete
とは対照的)。ただし、FEATURE_FIND_MTIME
機能がビルド時に無効にされた、busybox
の簡略版があります。
それを有効にしてbusyboxを再構築できる場合、次のことができるはずです。
find . -mtime +6 -type f -exec rm -f {} +
または、FEATURE_FIND_DELETE
も有効になっている場合:
find . -mtime +6 -type f -delete
そうでない場合、他のオプションは、1週間前の変更時刻を持つように設定されているファイルでfind -newer
を使用することです(FEATURE_FIND_NEWER
が有効であると想定)。
touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
find . ! -type f -newer ../ref -exec rm -f {} +
または、-newer
が使用できないが、sh
の[
が-nt
をサポートしている場合:
touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
find . ! -type f -exec sh -c '
for f do
[ "$f" -nt ../ref ] || printf "%s\0" "$f"
done' sh {} + |
xargs -0 rm -f
man find
から:
-atime n
ファイルが最後にアクセスされたのはn * 24時間前です。ファイルが最後にアクセスされた24時間前の期間が判明した場合、小数部分は無視されるため、-atime +1に一致するには、ファイルは少なくとも2日前にアクセスされている必要があります。
-ctime n
ファイルのステータスは、n * 24時間前に最後に変更されました。丸めがファイルステータス変更時間の解釈にどのように影響するかを理解するには、-atimeのコメントを参照してください。
削除するファイルの使用例に応じて、これらはfind
の他の唯一のオプションです。 mtime
が利用できないのはなぜですか?どのファイルシステムを使用していますか?他のオプションを検討しましたか?