Assez simplement, étant donné que vous avez tagué linux, vous avez le stat
commande disponible, qui extraira l'heure de modification d'un fichier, et le GNU date
commande, qui va extraire l'heure d'une heure donnée :
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -ls
Si les résultats semblent corrects, alors :
find . -type f -exec sh -c '
h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 11 ] && [ "$h" -lt 15 ]' \
sh {} \; -delete
Voici un test avec le -ls
version :
$ 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
Merci à Kusalananda d'avoir écrit l'excellente réponse que j'ai suivie, à :Understanding the -exec option of `find`
Notez que nous ne le faisons pas veux le {} +
version de find
ici, comme nous voulons le -exec
les résultats doivent être par fichier, de sorte que nous supprimons uniquement les fichiers qui correspondent à la plage de temps.
Le script shell intégré comporte deux éléments principaux :déterminer l'horodatage "heure" du fichier, puis renvoyer le succès ou l'échec en fonction de la plage. La première partie est elle-même réalisée en deux morceaux. La variable reçoit le résultat de la substitution de commande ; la commande doit être lue à l'envers :
$(stat -c %Y "$1")
-- cette (deuxième) substitution de commande appellestat
sur le$1
paramètre du script shell intégré ;$1
a été attribué parfind
comme l'un des noms de chemin qu'il a trouvés. L'option %Y austat
La commande renvoie l'heure de modification en secondes depuis l'époque.date -d @ ... +%-H
-- cela prend les secondes depuis l'époque de la substitution de commande ci-dessus et demandedate
pour nous donner la partie Heures de ce temps ; le@
la syntaxe indiquedate
que nous lui donnons secondes depuis l'époque comme format d'entrée. Avec le-
option dans le format de sortie de la date, nous indiquons la date GNU à pas remplissez la valeur avec des zéros non significatifs. Cela évite toute erreur d'interprétation octale ultérieurement.
Une fois que nous avons le $h
Variable d'heure assignée, nous utilisons l'opérateur conditionnel de bash [[
pour demander si cette valeur est supérieure ou égale à 11 et aussi strictement inférieure à 15.