web-dev-qa-db-fra.com

Obtenir l'âge du fichier donné

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.

14
Alexej Magura

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:

  1. Accédé
  2. Modifié
  3. Modifié
  • 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)

(A partir de cette réponse)

Vous pouvez obtenir des dates liées à un fichier particulier en utilisant la commande stat.

Exemple

$ 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

OSX et HFS

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.

Timestamps

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.).

Systèmes de fichiers

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é.

Les références

17
slm

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
}
4
Nicholas Sushkin
stat -c %Y <filename>

regarder man stat pour -c (format) options

0
Guido Rizzi

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
0
Lri