Menemukan file yang lebih lama dari x hari pada sistem dengan kotak sibuk yang dipreteli

9

Saya perlu mencari dan menghapus file yang lebih lama dari 1 minggu di unit Pengembangan. Ada sejumlah utilitas terbatas yang tersedia pada unit ini. -mtime findPredikat tidak tersedia. Bagaimana saya memeriksa semua file yang lebih lama dari x hari dalam kasus ini?

Ravi
sumber
2
Tidak jelas apa yang Anda maksud dengan " mtimetidak tersedia". Itu bukan utilitas yang namanya saya kenali.
Kusalananda
/ path / to / my / folder $ find -type f -mtime +7 delete find: tidak dikenali: -mtime
Ravi
bagikan distro linux yang Anda gunakan.
Siva
3
Sepertinya itu sibuk tanpa kotak yang dibangun FEATURE_FIND_MTIME. Apakah FEATURE_FIND_NEWERdiaktifkan? Apakah find -newerbekerja? Apakah testutilitas Anda atau dasar dukungan [Anda ? sh-nt
Stéphane Chazelas
1
Anda dapat mengatasi ini jika Anda dapat menggunakan mereka touch -d/ date +%sdan[ file -nt other-file ]
Stéphane Chazelas

Jawaban:

11

-mtimeadalah predikat standar find(berlawanan dengan -delete) tetapi sepertinya Anda memiliki versi stripped down busybox, di mana FEATURE_FIND_MTIMEfitur tersebut telah dinonaktifkan pada waktu pembuatan.

Jika Anda dapat membangun kembali busybox dengan mengaktifkannya, Anda seharusnya dapat melakukan:

find . -mtime +6 -type f -exec rm -f {} +

Atau jika FEATURE_FIND_DELETEjuga diaktifkan:

find . -mtime +6 -type f -delete

Jika tidak, opsi lain dapat digunakan find -newer(dengan asumsi FEATURE_FIND_NEWERdiaktifkan) pada file yang diatur untuk memiliki waktu modifikasi satu minggu.

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

Atau jika -newertidak tersedia tetapi sh's [dukungan -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
Stéphane Chazelas
sumber
1
Ya, busybox adalah versi yang lebih ringan di sini. Setelah membangun kembali, find . -mtime +6 -type f -exec rm {} \;bekerja untuk saya
Ravi
2

Dari man find:

-atime n

File terakhir diakses n * 24 jam yang lalu. Ketika menemukan angka berapa periode 24 jam yang lalu file terakhir diakses, setiap bagian fraksional diabaikan, sehingga untuk mencocokkan -atime +1, file harus diakses setidaknya dua hari yang lalu.

- waktu n

Status file terakhir diubah n * 24 jam yang lalu. Lihat komentar untuk -atime untuk memahami bagaimana pembulatan mempengaruhi interpretasi waktu perubahan status file.

Bergantung pada kasus penggunaan file yang ingin Anda hapus, ini adalah satu-satunya pilihan lain untuk Anda find. Kenapa mtimetidak tersedia? Sistem file apa yang Anda gunakan? Apakah Anda menjelajahi opsi lain?

OneK
sumber
Mengajukan lebih banyak pertanyaan OP harus dilakukan sebagai klarifikasi komentar , bukan jawaban .
Jeff Schaller