Tällaisen nyypiön kulmakarvat kohosivat melkoisesti, kun säiettä lukiessa selvisi, ettei näin perusjuttua, kuin tiedostojen hakemista aikaperusteisesti ole toteutettu käyttöjärjestelmätasolla.
Yleisesti käyttöjärjestelmätasolla eli tiedostojärjestelmässä on toteutettu vain hakemistohierarkian sekä tiedostojen metadatan ja sisällön tallennus. Kaikki haut tehdään näiden tietojen pohjalta userspacen puolella.
Tiedostojen etsimiseen soveltuva perustyökalu find tukee kyllä useita yleisesti tarvittavia aikapohjaisia hakuja, mutta tällainen päivittäinen tiettyjen kellonaikojen välinen intervalli ei onnistu suoraan, vaan päivämäärä on määriteltävä:
find . -newermt "2015-03-01 11:59:59" -and -not -newermt "2015-03-03 12:06:00"
Sen perusteella voisi siis kikkailla jotain tällaista:
#!/bin/sh
for year in $(seq 2000 2015); do
for day in $(seq 0 365); do
dt=$(date --date "$year-01-01 + $day days" "+%Y-%m-%d")
find "$1" -newermt "$dt 11:59:59" -and -not -newermt "$dt 12:05:00" -exec cp -a "{}" /polku/kohdehakemistoon/ \;
done
done
Tämä ei kuitenkaan ole erityisen hyvä ratkaisu, koska find-komento ajetaan uudelleen jokaisen päivän kohdalla ja se käy kaikki annetun hakemiston tiedostot läpi.
Alla statin antaman aikaleiman vertailuun perustuva tehokkaampi skripti, joka käy annetut tiedostot läpi vain yhden kerran:
#!/bin/sh
for f in "$@"; do
mtime=$(stat -c "%y" "$f" | cut -d' ' -f2)
hour=$(echo "$mtime" | cut -d: -f1)
min=$(echo "$mtime" | cut -d: -f2)
if [ "$hour$min" -ge "1200" ] && [ "$hour$min" -lt "1205" ]; then
cp -a "$f" /polku/kohdehakemistoon/
fi
done
Lisäys: ajaaskel ehtikin lisätä viestiinsä samansuuntaisen ratkaisun, mutta jätetään tämäkin esille