Menghapus file berdasarkan usia

16

Apakah ada perintah untuk menghapus semua file dalam direktori yang belum dimodifikasi dalam N hari? Saya perlu membersihkan beberapa log lama.

pengguna1024
sumber

Jawaban:

24

Ini akan menghapus semua file yang lebih lama dari 5 hari, Anda dapat meletakkannya -name '*log'di sana juga untuk menjadi lebih tepat dan Anda mungkin ingin menentukan maxdepthdalam perintah find juga.

find /some/dir -type f -mtime +5 -delete

Mark McKinstry
sumber
5
Meskipun sysadmin yang bijaksana melakukan dry-run dengan -lsalih - alih -deletememastikan ini tidak akan menghapus apa pun yang mereka inginkan disimpan. Ya, berbicara dari pengalaman di sini.
Shadur
2
Berbicara dari pengalaman, mereka juga memeriksa jalan mereka. atau tidak, karena saya pernah melakukan / some/dir/versi. :(
Hennes
3

Dengan zshdan (.m+n) kualifikasi global : .hanya memilih file biasa, m+nmemilih file yang dimodifikasi lebih dari n hari yang lalu;
mis. daftar file dalam direktori saat ini yang telah dimodifikasi lebih dari 9 hari yang lalu:

print -rl -- *(.m+9)

tambahkan Duntuk memasukkan file dot:

print -rl -- *(D.m+9)

atau jika Anda ingin berulang (dan daftar misalnya hanya file yang diakhiri dengan .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

ganti print -rldengan rmjika Anda senang dengan hasilnya; meskipun Anda mungkin harus menggunakan zargsjika Anda memiliki banyak file (untuk menghindari daftar argumen terlalu lama ):

autoload zargs
zargs ./**/*(.m+9) -- rm
don_crissti
sumber