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


14

特定のファイルより古いすべてのファイルをフォルダーから削除する必要があります。
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

回答:


28

試したことはありませんが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/ます。


2
完璧:)。-maxdepth 1検索が再帰的でないようにするために追加されました
-csny

3
! -newer「新しくない」という意味なので、「古いか同じ年齢」です。ファイルがパスルックにある場合、ファイル自体が一致することfindに注意してください。
フェラーダ

1
@feradaあなたがそれを除外してもそれは起こりません。それが私の答えにも含まれている理由です! -name reference(3番目の箇条書きを参照)。
ジョンWHスミス

7

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

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

2
おかげで、それは私のソリューションよりも優れていますが、フォルダ内のすべてのファイルを繰り返し比較する必要があります...他の答えはさらにエレガントです
-csny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.