Est-il possible d'obtenir l'heure à laquelle le fichier a été ouvert la dernière fois et de trier tous les fichiers d'un répertoire par ces heures?
Cela dépend de ce que vous entendez par "ouvert", mais en général, oui. Il y a trois horodatages normalement enregistrés:
mtime
- mis à jour lorsque le contenu du fichier change. C'est l'heure du fichier "par défaut" dans la plupart des cas.ctime
- mis à jour lorsque le fichier ou ses métadonnées (propriétaire, autorisations) changentatime
- mis à jour lors de la lecture du fichierDonc, en général, ce que vous voulez voir est le atime
fichier. Vous pouvez l'obtenir avec stat
ou avec ls
. Vous pouvez utiliser ls -lu
ceci, bien que je préfère utiliser ls -l --time=atime
(ce qui devrait être supporté dans presque toutes les distributions Linux modernes) parce que je ne l'utilise pas souvent, et quand je le fais, je m'en souviens mieux. Et pour trier par heure, ajoutez le -t
drapeau à ls. Alors voilà.
Il y a cependant une grosse mise en garde. La mise à jour de l'heure à chaque lecture d'un fichier entraîne beaucoup d'E / S généralement inutiles, ce qui ralentit tout. Ainsi, la plupart des distributions Linux noatime
utilisent maintenant l’ option de montage du système de fichiers, qui tue pratiquement toutes les fois, ou relatime
ne met à jour que très souvent une fois la limite écoulée (normalement une fois par jour) ou si le fichier a été modifié depuis la dernière lecture. Vous pouvez trouver si ces options sont actives en exécutant la mount
commande.
Notez également que les temps d'accès sont par inode, et non par nom de fichier. Ainsi, si vous avez des liens physiques, la lecture de l'un d'eux mettra à jour tous les noms qui font référence au même fichier.
Et, sachez que c n’est pas une "création"; la création n'est pas suivie par les systèmes de fichiers Unix / Linux, ce qui semble étrange mais qui a du sens car le système de fichiers n'a aucun moyen de savoir s'il s'agit de l'original - le fichier a peut-être été créé il y a quarante ans et copié ici. Et, en fait, de nombreux éditeurs de fichiers travaillent en faisant des copies sur l’original. Si vous avez besoin de ces informations, il est préférable d’utiliser un système de contrôle de version tel que git
.
mount
page de manuel mise à jour .ls
raccourcit le temps par défaut à une précision raisonnable. Pour voir l'heure en toute précision, on peut utiliser--full-time
.ls -ltu
liste tous les fichiers, montrant et triant par temps d'accès.De
man ls
:la source
La
find
commande est la meilleure pour cela. Voir les-ctime
,-mtime
et les-atime
optionsla source
Si votre liste est destinée à la consommation humaine, utilisez-la
ls
avec l'un des indicateurs de tri par date (-tu
pour l'heure d'accès (lecture), uniquement-t
pour l' heure de modification (écriture) ou-tc
pour l'heure de changement d'inode). Voir la réponse de mattdm pour plus d'informations (en particulier la mise en garde concernant-a
et la définition de-c
).S'il s'agit d'une consommation de programme, l' analyse de la sortie de
ls
est problématique . De toute façon, si votre shell est en zsh, vous n’avez dels
toute façon plus besoin de rien : zsh dispose de qualificatifs globbing pour trier les correspondances en augmentant le temps access (*(Oa)
), inode change (*(Oc)
) ou modification (*(Om)
). Un tri minusculeo
en vieillissant.Sinon, si vous savez que les noms de fichier ne contiennent pas de caractères de nouvelle ligne ou non imprimables (dans les paramètres régionaux en cours), vous pouvez effectuer les opérations suivantes:
Si vous souhaitez appeler une commande sur plusieurs fichiers à la fois, vous avez besoin de plus de configuration. Notez que
act_on_files_by_date $(ls -t)
cela ne fonctionne pas comme cela, car les noms de fichiers contenant des caractères génériques ou des espaces seraient développés dans le résultat de la substitution de commande. Le code suivant fonctionne tant qu'aucun nom de fichier ne contient de nouvelle ligne ou de caractère non imprimable:Si vous voulez faire face à des noms de fichiers arbitraires, vous aurez beaucoup de mal à faire appel à des outils plus puissants qu'un shell standard: zsh, perl, python…
la source