GNU/Linux >> Tutoriels Linux >  >> Linux

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

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 :

  1. $(stat -c %Y "$1") -- cette (deuxième) 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 au 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.

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.


Linux
  1. Comment joindre deux fichiers texte sous Linux

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

  3. Lignes communes entre deux fichiers ?

  4. Rechercher des fichiers créés entre une plage de dates

  5. Comment copier rapidement un grand nombre de fichiers entre deux serveurs

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

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 des fichiers répertoriés dans un autre fichier sous Linux

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