Comment puis-je obtenir l'âge d'un fichier donné, au moins, jours?
Je suis bien au courant de ls -lh
et commandes similaires. Je veux quelque chose qui fonctionnera en quelque sorte comme ça:
getfage <FILE> # prints out '12d' (12 days)
De plus, cela doit être un peu multiplate-forme car j'aimerais également l'utiliser sous Mac OS X, mais le cas d'utilisation principale est sur ma boîte à linux.
NOTE
Puisque Linux ne suit pas le temps de création, je recherche une solution à deux fois: une pour MTI0 (Linux) - c'est La dernière fois que ledit fichier a été modifié - et un pour Mac OS X, qui peut soit traiter avec MTTI ou temps de création.
Unix ne garde pas trace d'une date de création. La seule information qui est disponible est généralement la dernière fois les fichiers était:
- Accès - la dernière fois que le fichier a été lu
- Modifier - la dernière fois que le fichier a été modifié (le contenu a été modifié)
- Changement - La dernière fois que les données méta du fichier a été modifié (par exemple des autorisations)
Vous pouvez obtenir des dates liées à un fichier particulier en utilisant la commande stat
.
$ stat ffmpeg
File: `ffmpeg'
Size: 19579304 Blocks: 38248 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 10356770 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 500/ saml) Gid: ( 501/ saml)
Access: 2013-11-26 10:49:09.908261694 -0500
Modify: 2013-11-02 17:05:13.357573854 -0400
Change: 2013-11-02 17:05:13.357573854 -0400
Si vous utilisez le système de fichiers Mac OS X qui est utilisé sous Unix est que HFS . Ceci est l'un des rares (que je connais) qui maintient la date de création au sein du système de fichiers, ainsi que le temps de modification, etc. similaire à d'autres unix.
Extrait
Un Disquaires de fichiers une variété de métadonnées sur le fichier, y compris son CNID, la taille du fichier, trois horodatages (lorsque le fichier a été créé, modifiée, dernier sauvegardés), les premières extensions de fichier des données et des fourchettes de ressources et pointeurs pour premiers enregistrements de données et mesure des ressources du fichier dans le fichier de dépassement étendue. Le fichier stocke également deux enregistrement champs 16 octets qui sont utilisés par le Finder pour les attributs de magasin sur le fichier, y compris des choses comme son code créateur, le code de type, la fenêtre du fichier doit apparaître et son emplacement dans la fenêtre.
Les horodateurs sont toujours maintenus dans le système de fichiers, de sorte que vous êtes limité par le temps quel que soit le suivi est offert par eux (EXT3, EXT4, XFS, etc.).
Si jamais vous êtes curieux jeter un oeil à ce sujet Wikipedia intitulé: Comparaison des systèmes de fichiers . Il a la plus longue liste de filesytems je connais avec une table de Nice des différentes caractéristiques et l'état de savoir si elle est prise en charge ou non dans un système de fichiers donné.
OSX conserve une trace de la création de fichiers, mais la plupart des autres assemblées ne le font pas, il n'ya donc aucun moyen de connaître le temps écoulé depuis la création de fichiers. Vous pouvez obtenir le temps écoulé depuis sa dernière modification sur n'importe quel système d'exploitation.
Il n'y a pas d'utilitaire shell portable pour récupérer l'heure de modification d'un fichier, sauf ls
qui a une sortie presque impossible à analyser. Sous Linux, la commande suivante imprime l'âge d'un fichier:
echo $(($(date +%s) - $(date +%s -r "$filename"))) seconds
echo $((($(date +%s) - $(date +%s -r "$filename")) / 86400)) days
Sous Linux, vous pouvez utiliser stat -c %Y -- "$filename"
comme synonyme de date +%s -r "$filename"
.
OSX date
et stat
_ Les commandes sont différentes. Vous pouvez utiliser la commande suivante:
echo $(($(date +%s) - $(stat -t %s -f %m -- "$filename"))) seconds
Les systèmes Linux non intégrés et OSX ont installé par défaut par défaut.
Perl -l -e 'print -M $ARGV[0], " days"' "$filename"
Basé sur la réponse de Gilles, voici une fonction Bash qui retourne l'âge du fichier en secondes ou une erreur.
function fileAge
{
local fileMod
if fileMod=$(stat -c %Y -- "$1")
then
echo $(( $(date +%s) - $fileMod ))
else
return $?
fi
}
stat -c %Y <filename>
regarder man stat
pour -c
(format) options
Vous pouvez utiliser stat -f%B
, ls -lU
, ou mdls -n kMDItemFSCreationDate
Pour voir la création (naissance) heure dans OS X:
$ stat -f%B file
1402340803
$ ls -lU file
-rw-r--r-- 1 admin staff 108514 Jun 9 22:06 file
$ mdls -n kMDItemFSCreationDate file
kMDItemFSCreationDate = 2014-06-09 19:06:43 +0000
$ echo $((($(date +%s)-$(stat -f%B file))/86400))
10