GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – Comment supprimer des fichiers créés entre deux fois ?

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 :

  1. $(stat -c %Y "$1") — cette (seconde) substitution de commande appelle stat sur le $1 paramètre du script shell intégré ; $1 a été attribué par find comme l'un des noms de chemin qu'il a trouvés. L'option %Y de la stat La commande renvoie l'heure de modification en secondes depuis l'époque.
  2. date -d @ ... +%-H - cela prend les secondes depuis l'époque de la substitution de commande ci-dessus et demande date pour nous donner la partie Heures de ce temps ; le @ la syntaxe indique date 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.
En relation :Debian Lenny :Vous voulez que Splashy démarre directement après Grub2 ?

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.


Linux
  1. Comment transférer des fichiers entre deux ordinateurs à l'aide des commandes nc et pv

  2. Comment supprimer des fichiers ÉNORMES (100-200 Go) sous Linux

  3. Comment renommer des fichiers sous Linux

  4. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  5. Comment créer des fichiers d'une certaine taille sous Linux

Comment utiliser la commande de date dans les scripts bash sous Linux

Comment afficher deux fichiers côte à côte sous Linux

Comment comparer deux fichiers dans un terminal Linux

Comment synchroniser automatiquement des fichiers entre deux serveurs Linux

Comment supprimer/supprimer des fichiers sous Linux à l'aide de la commande rm

Comment compter les fichiers dans le répertoire sous Linux