UNIX / BASH: Liste des fichiers modifiés au cours d'un mois donné
J'ai du mal avec la liste des fichiers modifiés dans un mois spécifique (par exemple, en février).
Voici plusieurs tentatives infructueuses:
1) j'ai essayé de créer des fichiers temporaires et l'établissement de leurs timestamp pour la première fois le mois prochain et pour la première fois dans la cible mois et utilisez -la plus récente à trouver, comme ceci:
find -newer "$from" ! -newer "$to"
Cette liste les fichiers modifiés dans l'intervalle de temps ($from,$], mais je voudrais l'intervalle de temps [$from,$) (sinon, il y aurait des faux positifs sur les fichiers créés sur la première seconde dans le mois suivant). Liste des fichiers modifiés en février, c'est l'autre problème, puisque cela exigerait de définir une des horodateurs pour le plus grand en février, mais le nombre de jours de février varie selon s'il s'agit d'une année bissextile ou non, ce qui nécessite des vérifications supplémentaires.
2) Si j'utilise ls
je vois beaucoup de complication lors de l'analyse, en raison de la possibilité que le nom d'utilisateur ou de groupe contenir d'espaces.
Est-il un moyen facile et relativement mobiles pour ce faire (de sorte qu'il fonctionne pour n'importe quel mois, quel que soit le nom des fichiers, etc.)?
source d'informationauteur eold
Vous devez vous connecter pour publier un commentaire.
date
permet , vous pouvez facilement générer des horodateurs pour les fins comme ça:Heureusement, la même syntaxe est possible dans
find
:trouverez tous les fichiers modifiés en Mars 2010
Bien, je peux créer des fichiers qui ont le minimum de l'horodatage et l'horodatage maximum en février, et fichiers qui sont juste au-delà de février dans chaque direction.
Puis à l'aide de GNU 'rechercher', comme cela semble montrer seulement les fichiers dont le timestamp est en février.
Je ne sais pas comment portable ces arguments sont pour les autres versions de "trouver".
Ajoutant à Pumbaa80 réponse:
Dans mon environnement de pré-production, trouver ne prend pas en charge -newermt.
Ce que j'ai fait, c'est plutôt:
find
ls
etc.)Générer le timestamp de la dernière seconde de le mois dernier et ce mois-ci
Itérer sur la liste du point 1 et de comparer l'horodatage de chaque fichier avec le timestamp à partir du point 2
Une solution pourrait être d'utiliser l'
-printf
option pourfind
:Je ne pense pas que
find
pouvez filtrer les-printf
résultat en lui-même, il ne peut filtrer sur la date éléments.modifier ou si vous voulez vraiment le
ls
-comme sortie: