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 memanggilstatpada$1parameter skrip shell tertanam;$1ditugaskan olehfindsebagai salah satu nama jalur yang ditemukannya. Opsi %Y kestatperintah mengembalikan waktu modifikasi dalam detik-sejak-Epoch.date -d @ ... +%-H-- ini mengambil detik-sejak-zaman dari substitusi perintah di atas dan memintadateuntuk memberi kami bagian Jam dari waktu itu;@sintaks memberitahudatebahwa 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.