web-dev-qa-db-ja.com

特定のファイルより古いファイルを削除する

特定のファイルより古いすべてのファイルをフォルダから削除する必要があります。
CentOS 7でbashを実行しています。

私はこれに対する解決策を持っていますが、それを行うよりエレガントな方法があるはずだと思います:

reference_file=/my/reference/file

get_modify_time()
{
    stat $1 | grep -Po "Modify: \K[0-9- :]*"
}

pit=$(get_modify_time $reference_file)
for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done
14
csny

私は試していませんが、findは操作全体をうまく処理できるはずです。

$ find dir/ -type f ! -newer reference -delete

...または...

$ find dir/ -type f ! -newer reference ! -name reference -delete

基本的に:

  • ! -newer referenceは、referenceよりも最近変更されていないファイルに一致します。
  • -deleteはそれらを削除します。
  • ! -name referenceは、referenceを除外します。dir/の下にも配置されており、保持したい場合に備えます。

これにより、referenceより古く、dir/の下にあるすべてのファイルが削除されます。

28
John WH Smith

-nt(より新しい)および-ot(より古い)演算子を使用して、ファイルの変更時間をtestと比較します。

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi
7
serenesat