Comment répertorier de manière récursive tous les fichiers modifiés entre le 22.12.2011 et le 24.12.2011?
files
recursive
timestamps
serrer
la source
la source
Réponses:
En règle générale, lorsque vous recherchez des fichiers dans un répertoire et ses sous-répertoires de manière récursive, utilisez
find
.Le moyen le plus simple de spécifier une plage de dates
find
consiste à créer des fichiers aux limites de la plage et à utiliser le-newer
prédicat.la source
-newer
est nécessaire ici?-newer
n'est pas nié, le second l'est. "Rechercher des fichiers plus récents questart
mais pas plus récents questop
".start
etstop
.En utilisant la solution de Gilles et après avoir lu l' homme à trouver (1) , j'ai trouvé une solution plus simple. La meilleure option est le -newerXY. Les drapeaux m et t peuvent être utilisés.
Donc la solution est
La limite inférieure en inclusif et la limite supérieure sont exclusives, alors j’y ai ajouté 1 jour! Et c'est récursif. Cela fonctionne bien sur find v4.5.9.
la source
find -newermt 20150212 \! -newermt 20150213 | xargs grep 'keyword' -m 50 -l
(-m 50
= recherche dans les 50 premières lignes).-exec ... +
dansfind(1)
, comme:find -newermt 20150212 \! -newermt 20150213 -exec grep keyword -m 50 -l {} +
. Cela fait la même chose, mais moins cher.find 4.7.0-git
).Outre les réponses déjà données, notez que vous pouvez directement spécifier vos dates:
ou
si vous souhaitez également spécifier l'heure.
la source
En supposant que vous n’ayez pas besoin de précision aux secondes, cela devrait fonctionner.
EDIT: Changé
cmin
pourmmin
après @ commentaire de Eelvex. EDIT: '\!' manquantla source
-cmin
est "changement d'état",-mmin
est "changement de données". Vous voulez probablement-mmin
find
peut prendre une date / heure au format ISO. Ainsi, pour un serveur au format UTC, par exemple, vous pouvez spécifier un décalage d’un nombre d’heures peu importe où vous vous trouvez. Cela évite également d’ajouter un jour puisque vous comparez aussi le temps:la source
Veuillez noter que la question marquée comme étant en double et, par conséquent, empêchée d'y répondre directement, est la raison pour laquelle je poste ici. Cette réponse sert à répondre à la question "Nécessité de déplacer des fichiers vers un dossier différent en fonction de la date de création [dupliquer]"
Les réponses sont raisonnables mais il y avait quelques limitations avec une commande purement trouver. J'ai écrit ce script shell pour parcourir un répertoire contenant autant de fichiers que le système de fichiers bâillonnait sur les métadonnées en essayant d'exécuter un ls. De plus, certains systèmes * nix verront une erreur de nombre d'arguments trop importante avec ls.
La commande find est très puissante et j'ai commencé avec les méthodes répertoriées, mais j'avais des années de données dans ce répertoire et je devais passer tous les fichiers à plusieurs reprises. Cela produit beaucoup de données inutiles sur chaque fichier. J'ai essayé de faire un écran par an et d'exécuter plusieurs recherches, mais cela a entraîné beaucoup d'erreurs dans chaque recherche et des fichiers disparaissaient lorsque l'une des recherches le déplaçait.
Mon script shell déplace un fichier dans le répertoire de destination, avec une année à 4 chiffres et un mois à 2 chiffres. Il peut facilement être étendu à un jour à 2 chiffres en décommentant quelques lignes et en commentant leurs homologues. Je crois que c’est plus efficace parce que c’est-à-dire qu’il fallait effectuer les déplacements en un seul passage, de sorte que plusieurs commandes de recherche et passages sur le répertoire sont inutiles.
Une fois enregistré et rendu exécutable, vous pouvez appeler ce script avec find comme suit.
Vous n'avez pas besoin de vous inquiéter de la définition de l'option newermt pour find car tout ce que find fournit est une seule exécution par fichier trouvé et le script prend toutes les décisions.
Gardez à l'esprit que si vous ne sélectionnez pas -type f, les répertoires seront déplacés, ce qui causera probablement des problèmes. Vous pouvez également utiliser -type d si vous souhaitez déplacer uniquement des répertoires. Ne pas définir le type provoquera presque certainement un comportement indésirable.
Rappelez-vous que ce script a été adapté à mes besoins. Vous voudrez peut-être simplement utiliser ma construction comme source d'inspiration pour un script mieux adapté à vos besoins. Merci!
Considérations: L’efficacité de la commande peut être grandement améliorée en permettant à un nombre illimité d’arguments de passer à travers le script. C'est en fait relativement facile si vous passez sur la variable $ @. En étendant les fonctionnalités, nous pourrions utiliser la fonction -exec + de find ou tirer parti de xargs, par exemple. Je peux rapidement mettre en œuvre cela et améliorer ma propre réponse, mais c'est un début.
Comme il s’agissait d’une session de script unique, de nombreuses améliorations peuvent probablement être apportées. Bonne chance!
la source