Comment obtenir uniquement les fichiers créés après une date avec ls?

97

Avec la lscommande, est-il possible d'afficher uniquement les fichiers créés après une date, une heure ...?

Je le demande parce que j'ai un répertoire avec des milliers de fichiers.

Je veux donc voir tous les fichiers qui ont été créés depuis hier.

J'utilise ls -ltrmais je dois attendre de voir tous les fichiers ...

Il y a un équivalent de DIRECTORY/SINCE=dateOpenVMS?

Luc M
la source
1
lsrépertorie les fichiers, mais offre peu de choix pour sélectionner les fichiers à répertorier ou le format de sortie. Utilisez globbing (caractères génériques du shell) ou findlorsque vous souhaitez sélectionner des fichiers par nom ou par métadonnées (date, par exemple).
Gilles
3
Alors, comment s'est passé le rendez-vous avec ls? Vous vous êtes bien entendu?
Garrett Albright
3
Avec zsh:ls -1 -- *(.m-1)
don_crissti

Réponses:

123

Vous pouvez utiliser la findcommande pour rechercher tous les fichiers qui ont été modifiés après un certain nombre de jours.

Par exemple, pour rechercher tous les fichiers du répertoire actuel modifiés depuis hier (il y a 24 heures), utilisez:

find . -maxdepth 1 -mtime -1

Notez que pour trouver des fichiers modifiés avant 24 heures, vous devez utiliser à la -mtime +1place de -mtime -1.

dogbane
la source
3
La chose même que j'aurais dit. Il n'y a aucune raison de vous limiter à lsici, Luc.
Warren Young
15
Avec GNU find, il existe d’autres possibilités. -mmin 5répertorie les fichiers modifiés au cours des 5 dernières minutes. -newermt "2011-02-27 13:42"répertorie les fichiers modifiés depuis la date spécifiée. Vous pouvez utiliser à la -exec ls --color -ld {} +place de -lspour obtenir l’affichage couleur habituel (si vous aimez la sortie ls en couleur).
Gilles
4
Notez le signe moins:find . -mmin -5
user7543
et -maxdepth 1 peut être augmentée à une valeur de n pour rechercher des fichiers sous le niveau de sous - répertoire trop
Anshuman
3
pour moi cela fonctionne comme ceci: trouver. -type f -newermt '15/01/2012 18:09:00'
woohoo
15
find . -type f -newermt '1/30/2017 0:00:00'

Ceci trouvera tous les fichiers modifiés après une date spécifique.

nullabilité
la source
1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"
Trant Batey
la source
5
Salut Trant! Bien que votre solution soit créative en essayant de respecter la demande de la question d’utiliser ls, l’analyse de la sortie de ls est rarement sûre (par exemple, que se passe-t-il avec les noms de fichiers, y compris les nouvelles lignes ici?), Et nous apprécions que les réponses ne soient pas un seul. doublures, mais plutôt pour expliquer leur fonctionnement de manière aussi détaillée que possible.
Dhag
1
Problèmes: (1) Sur mon système, datedit Jun 03, mais lsdit Jun  3, donc cela ne fonctionne pas. (2) Il y a une semaine, la date était le 27 mai. Les  ls -l | grep "May 27"fichiers modifiés le jour même, mais également les fichiers modifiés le 27 mai de toute autre année, ainsi que les fichiers portant le nom «27 mai». (Et si vous pensez que est une préoccupation tout à fait faux, regardez « 10 décembre » .) (3) Et, si vous avez réussi à datedire Jun 2, grep pour qui trouverait à Jun 20travers Jun 29, mais pas Jun  2(avec deux places). … (Suite)
G-Man le
1
(Suite)… (4) Le PO utilisait ls -ltrpour obtenir les fichiers les plus récemment modifiés à la fin de la liste. Si vous recherchez une date, il n'y a aucun besoin de le faire (sauf pour obtenir les fichiers du 27 mai 2015 à la fin de la liste, après les fichiers du 27 mai 2014, du 27 mai 2013, etc.). (5) Dans awk, cela print $2, $3équivaut à print $2" "$3, et est beaucoup plus facile à lire, surtout quand il y a trois autres niveaux de citations.
G-Man
ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo
0

J'espère que cela fonctionne:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

Ici:

$6 indicates position of month
$7 indicates day of the month

Cette commande affiche tous les noms de fichiers créés entre le 1er et le 31 mai.

si vous voulez imprimer la date aussi bien sur la console essayez ceci

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Si vous voulez spécifier le chemin du répertoire, vous pouvez essayer ceci

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'
Rohit Nimmala
la source
Pour de nombreuses raisons, ce n'est pas une bonne idée d'analyser la lssortie. Et tout le monde ne parle pas anglais :-)
Luc M