Hapus file yang lebih lama dari file tertentu

14

Saya perlu menghapus dari semua file folder lebih tua dari file tertentu.
Menjalankan bash di CentOS 7.

Saya punya solusi untuk ini, tetapi saya pikir harus ada cara yang lebih elegan untuk melakukannya:

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
csny
sumber

Jawaban:

28

Saya belum mencobanya, tetapi findharus dapat menangani seluruh operasi dengan baik:

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

... atau...

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

Pada dasarnya:

  • ! -newer referencecocok dengan file yang telah dimodifikasi kurang dari reference.
  • -delete menghapusnya.
  • ! -name referencetidak termasuk reference, seandainya juga terletak di bawah dir/dan Anda ingin menyimpannya.

Ini harus menghapus semua file yang lebih lama dari reference, dan terletak di bawah dir/.

John WH Smith
sumber
2
Sempurna :). Baru ditambahkan -maxdepth 1untuk menjaga agar pencarian tidak
berulang
3
! -newerberarti "tidak baru", jadi "lebih tua atau usia yang sama "; file itu sendiri akan dicocokkan jika ada di jalan findmelihat, hanya sesuatu yang perlu diingat.
ferada
1
@ferada Tidak akan jika Anda mengecualikannya, itulah sebabnya jawaban saya juga termasuk ! -name reference(lihat butir ketiga).
John WH Smith
7

bandingkan waktu modifikasi file dengan test, menggunakan -nt(lebih baru dari) dan -ot(lebih tua dari) operator:

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi
serenesat
sumber
2
Terima kasih, itu lebih baik daripada solusi saya, tetapi Anda masih harus mengulang semua file di folder dan membandingkan ... Jawaban lainnya bahkan lebih elegan
csny