web-dev-qa-db-ja.com

busyboxが取り除かれたシステムでx日より古いファイルを見つける

開発ユニットで1週間より古いファイルを見つけて削除する必要があります。このユニットで使用できるユーティリティの数は限られています。 -mtimefindの述語は使用できません。この場合、x日より古いすべてのファイルを確認するにはどうすればよいですか?

9
Ravi

-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
11

man findから:

-atime n

ファイルが最後にアクセスされたのはn * 24時間前です。ファイルが最後にアクセスされた24時間前の期間が判明した場合、小数部分は無視されるため、-atime +1に一致するには、ファイルは少なくとも2日前にアクセスされている必要があります。

-ctime n

ファイルのステータスは、n * 24時間前に最後に変更されました。丸めがファイルステータス変更時間の解釈にどのように影響するかを理解するには、-atimeのコメントを参照してください。

削除するファイルの使用例に応じて、これらはfindの他の唯一のオプションです。 mtimeが利用できないのはなぜですか?どのファイルシステムを使用していますか?他のオプションを検討しましたか?

2
OneK