Saya sedang menulis skrip bash yang perlu menghapus file lama.
Saat ini diterapkan menggunakan:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Ini akan menghapus file yang lebih lama dari 1 hari.
Namun, bagaimana jika saya membutuhkan resolusi yang lebih baik dalam 1 hari, katakanlah seperti 6 jam? Apakah ada cara bersih yang bagus untuk melakukannya, seperti menggunakan find dan -mtime?
$LOCATION
dan$REQUIRED_FILES
dapat keduanya memiliki beberapa nilai sepertidir1 dir2
dan*.txt *.tmp
?Anda dapat melakukan trik ini: membuat file 1 jam yang lalu, dan menggunakan
-newer file
argumen.(Atau gunakan
touch -t
untuk membuat file seperti itu).sumber
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
Membuat filetest
yang selalu berumur 1 jam.Inilah pendekatan yang berhasil untuk saya (dan saya tidak melihatnya digunakan di atas)
menghapus semua file yang lebih lama dari 59 menit sambil membiarkan folder tetap utuh.
sumber
'*.*'
atau shell akan memperluas ke nama file yang sebenarnya daripada menyimpannya sebagai wildcard untukfind
diselesaikan. Ini memecahfind
operasi rekursif pada subdir.-name '*.*'
tidak akan menghapus file yang tidak memiliki ekstensi, sepertiREADME
,Makefile
, dllUntuk SunOS 5.10
sumber
-min adalah selama beberapa menit.
Coba lihat halaman manual.
untuk lebih banyak tipe.
sumber
Jika Anda tidak memiliki "-mmin" di versi "find", maka "-mtime -0.041667" mendekati "dalam satu jam terakhir", jadi dalam kasus Anda, gunakan:
jadi, jika X berarti 6 jam, maka:
bekerja karena 24 jam * 0,25 = 6 jam
sumber
Inilah yang dapat dilakukan seseorang untuk melanjutkan cara @iconoclast bertanya-tanya tentang komentar mereka pada jawaban lain.
gunakan crontab untuk pengguna atau
/etc/crontab
untuk membuat file/tmp/hour
:dan kemudian gunakan ini untuk menjalankan perintah Anda:
sumber
*/1
untuk setiap jam adalah berlebihan di crontab Anda. Ini sama dengan menempatkan * di bidang jam.find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
sumber
Jika seseorang
find
tidak memiliki-mmin
dan jika seseorang juga terjebak denganfind
yang hanya menerima nilai integer-mtime
, maka semua tidak selalu hilang jika seseorang menganggap bahwa "lebih tua dari" mirip dengan "tidak lebih baru dari".Jika kami dapat membuat file yang memiliki batas waktu cut-off kami, kami dapat meminta
find
untuk mencari file yang "tidak lebih baru dari" file referensi kami.Untuk membuat file yang memiliki waktu yang benar cap adalah sedikit terlibat karena sistem yang tidak memiliki cukup
find
mungkin juga memiliki kurang mampudate
perintah yang bisa melakukan hal-hal seperti:date +%Y%m%d%H%M%S -d "6 hours ago"
.Untungnya, alat lama lain yang dapat mengelola ini, meskipun dengan cara yang lebih sulit.
Anggap enam jam adalah 21600 detik. Kami ingin menemukan waktu enam jam yang lalu dalam format yang bermanfaat:
Pernyataan perl memang menghasilkan tanggal yang bermanfaat, tetapi harus dimanfaatkan dengan lebih baik:
Sekarang solusi untuk UNIX lama ini adalah sesuatu seperti:
Mungkin juga merupakan ide bagus untuk membersihkan file referensi kami ...
sumber