web-dev-qa-db-fra.com

Différence entre python - getmtime () et getctime () dans un système Unix

Quelqu'un peut-il s'il vous plaît préciser quelle est la différence entre os.path.getmtime(path) et os.path.getctime(path) dans les systèmes Unix. Selon la définition dans la documentation python:

os.path.getmtime(path)

Renvoie l'heure de la dernière modification du chemin. La valeur de retour est un nombre Indiquant le nombre de secondes écoulées depuis l'époque (voir le module de l'heure ). Raise os.error si le fichier n'existe pas ou est inaccessible.

os.path.getctime(path)

Renvoie le temps système du système, qui, sur certains systèmes (comme Unix), correspond à l’heure Du dernier changement et, sur d’autres (comme Windows), au moment de la création du chemin . La valeur de retour est un nombre donnant le nombre De secondes depuis l'époque (voir le module de l'heure). Lever le fichier os.error si Le fichier n'existe pas ou est inaccessible.

Est-ce que cela signifie fondamentalement qu'ils sont les mêmes choses lorsqu'ils sont utilisés dans unix/systems?

#!/usr/bin/python
import os
print os.path.getmtime('File')
print os.path.getctime('FIle')

Les deux empreintes me rapportent la même valeur. 

Je recherche fondamentalement la dernière date de création du fichier, plutôt que la date de dernière modification. Existe-t-il un moyen de réaliser la même chose sous Unix?

15
misguided

Le mtime fait référence à la dernière fois que le contenu du fichier a été modifié. Cela peut être modifié sur les systèmes Unix de différentes manières. Souvent, lorsque vous restaurez des fichiers à partir d'une sauvegarde, mtime est modifié pour indiquer la dernière fois que le contenu a été modifié avant la sauvegarde.

Ctime indique la dernière fois que l'inode a été modifié. Cela ne peut pas être changé. Dans l'exemple ci-dessus avec la sauvegarde, ctime reflétera toujours l'heure de la restauration du fichier. De plus, ctime est mis à jour lorsque des éléments tels que les autorisations de fichiers sont modifiés.

Malheureusement, il n’ya généralement aucun moyen de trouver la date originale de création du fichier. C'est une limitation du système de fichiers sous-jacent. Je pense que le système de fichiers ext4 a ajouté la date de création à l'inode et que le système de fichiers HFS d'Apple le prend également en charge, mais je ne sais pas comment vous allez le récupérer en Python. (La fonction C stat et la commande stat correspondante devraient vous montrer cette information sur les systèmes de fichiers qui la prennent en charge.)

14
eaj

Extrait de la page de manuel relative à stat, que os.path.getmtime() et os.path.getctime() utilisent tous deux sur les systèmes Unix:

Le champ st_mtime est modifié par les modifications de fichier, par exemple par mknod(2), truncate(2), utime(2) et write(2) (supérieur à zéro octet). De plus, st_mtime d'un répertoire est modifié par la création ou la suppression de fichiers dans ce répertoire. Le champ st_mtime n'est pas modifié pour les changements de propriétaire, de groupe, de nombre de liens physiques ou de mode.
... 

Le champ st_ctime est modifié en écrivant ou en définissant les informations inode (propriétaire, groupe, nombre de liens, mode, etc.).

Donc non, ce ne sont pas les mêmes.

3
Andrew Clark

Techniquement, ce n’est pas une question de programmation et ne devrait donc pas être sur Stack Overflow, mais vous pouvez trouver les réponses que vous recherchez ici - qui se trouve être le premier résultat de Google pour ctime mtime atime. Réponse courte: ctime change lorsque la propriété du fichier ou les autorisations changent, ainsi que lorsque les données du fichier sont modifiées. mtime ne change que lorsque les données du fichier sont modifiées.

0
kindall