J'ai un dossier dans lequel je sauvegarde mes bases de données et je veux supprimer toutes les sauvegardes créées entre 11h et 15h et peu importe le jour - c'est le hic !
J'ai trouvé cette commande très utile, mais pas dans mon cas d'utilisation :
find . -type f -newermt '01 nov 2018 00:00:00' -not -newermt '10 nov 2018 00:00:00' -delete
Mais là ça m'oblige à un intervalle entre deux dates ! Je souhaite supprimer uniquement les sauvegardes créées entre deux moments spécifiques.
Réponse acceptée :
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 la date
GNU 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, car 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 (seconde) 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 de lastat
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 également strictement inférieure à 15.