Cukup sederhana, mengingat Anda menandai linux, Anda memiliki stat
tersedia, yang akan mengekstrak waktu modifikasi file, dan GNU date
perintah, yang akan mengekstrak jam dari waktu tertentu:
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -ls
Jika hasilnya terlihat benar, maka:
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -delete
Ini adalah uji coba dengan -ls
versi:
$ touch -d 'Wed Sep 12 11:00:01 EDT 2018' 11am
$ touch -d 'Wed Sep 12 12:00:02 EDT 2018' 12pm
$ touch -d 'Wed Sep 12 15:00:03 EDT 2018' 303pm
$ find . -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' sh {} \; -ls
1705096 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./11am
1705097 0 -rw-r--r-- 1 user group 0 Sep 12 2018 ./12pm
Penghargaan untuk Kusalananda karena telah menulis jawaban luar biasa yang saya ikuti, di:Memahami opsi -exec dari `find`
Perhatikan bahwa kami tidak ingin {} +
versi find
di sini, karena kita menginginkan -exec
hasil menjadi per-file, sehingga kami hanya menghapus file yang sesuai dengan rentang waktu.
Skrip shell tersemat memiliki dua bagian utama:tentukan stempel waktu "jam" file dan kemudian kembalikan keberhasilan atau kegagalan berdasarkan rentang. Bagian pertama itu sendiri dilakukan dalam dua bagian. Variabel diberikan hasil dari substitusi perintah; perintah harus dibaca luar-dalam:
$(stat -c %Y "$1")
-- substitusi perintah (kedua) ini memanggilstat
pada$1
parameter skrip shell tertanam;$1
ditugaskan olehfind
sebagai salah satu nama jalur yang ditemukannya. Opsi %Y kestat
perintah mengembalikan waktu modifikasi dalam detik-sejak-Epoch.date -d @ ... +%-H
-- ini mengambil detik-sejak-zaman dari substitusi perintah di atas dan memintadate
untuk memberi kami bagian Jam dari waktu itu;@
sintaks memberitahudate
bahwa kami memberikannya detik-sejak-zaman sebagai format masukan. Dengan-
dalam format keluaran tanggal, kami memberi tahu tanggal GNU untuk tidak pad nilai dengan angka nol di depan. Hal ini mencegah salah interpretasi oktal di kemudian hari.
Setelah kita memiliki $h
Variabel jam ditetapkan, kami menggunakan operator bersyarat bash [[
untuk menanyakan apakah nilai itu lebih besar dari atau sama dengan 11 dan juga kurang dari 15.