J'essaie de définir le temps de création du système de fichiers pour un fichier sur Mac OS à l'aide d'un script Ruby.
sur Mac OS X Le "CTTIM" représente la dernière modification de l'inode plutôt que le temps de création de fichier, ainsi que Utiliser le fichier de Ruby.UTIME () pour définir CTime ne vous aidera pas. p>
Utilisation de cet indice [ http://ininentialien.com/2008/12/18/file_create_date_in_ruby_on_macs ] Je peux récupérer le temps de création d'un fichier: p> ... mais tout Idée sur la façon de la définir en utilisant Ruby? P> - MISE À JOUR - P> OK, je pense que je Même si le CTTI est techniquement utilisé par Mac OS pour suivre le temps de création de fichier, lorsque vous utilisez so Pour définir nom de fichier em> à un article de 1er oct. 2010 et un MTIME du 2 oct. 2010: P> . utime code> dans ruby. p>
utime code> pour mettre à jour le em> (avec le MTTIM EM>, qui doit être défini simultanément) le système de fichiers apparaît à mettre à jour par magie la durée de création selon
kmditemContentCreationDate .
File.utime(Time.strptime('011010', '%d%m%y'), Time.strptime('021010', '%d%m%y'), filename)
4 Réponses :
Vous avez donc définitivement une solution de rubis pur fonctionnant, mais comme ceci est OS X, êtes-vous opposé à si pour aucune autre raison que la clarté. P> p> EXEC () code> ou
système () code> et simplement en utilisant simplement
touchez code>? Dans votre cas, je préférerais presque:
toucher code> n'utilise pas le même mécanisme que
MDLS -Name kmDItemContentCreationDate -raw code> fait.
Il y a une solution rubis avec la méthode voir Ruby Core Documentation aussi. P> p> utime code>. Mais vous devrez définir le temps de modification (MTIME) et l'heure d'accès (ATime) à la fois fort>. Si vous souhaitez garder l'heure d'accès, vous pouvez utiliser:
Si vous exécutez stats -s -s code> sur ce fichier, vous verrez que cela ne met pas à jour la propriété
st_ctime code>.
Cela fonctionne pour moi de mettre à jour le temps de création sur le système d'exploitation X 10.11.1:
system "SetFile -d '#{time.strftime "%m/%d/%Y %H:%M:%S"}' #{file}"
Ruby utilise l'appel du système des utiles pour modifier les temps de fichier. P>
lire la page man destinations explique ce qui se passe: p>
int UTIMES (Cons-Char * PATH, ConstTr struct Timeval * fois); .. Si les temps sont non nuls, il est supposé indiquer un tableau de deux timbres structures. L'heure d'accès est définie sur la valeur du premier élément, et le temps de modification est défini sur la valeur du deuxième élément. Pour systèmes de fichiers qui prennent en charge les temps de naissance (création) (tels que UFS2), le Le temps de naissance sera réglé sur la valeur du deuxième élément si la seconde L'élément est plus vieux que le temps de naissance actuellement défini. Mettre à la fois une naissance temps et délai de modification, deux appels sont nécessaires; le premier à régler le temps de naissance et la seconde pour définir la modification (probablement plus récente) temps. ... p>
Donc, Carrez uniquement SEULEMENT Mise à jour en arrière dans le temps. P>
Vous voudrez peut-être publier votre «mise à jour» que votre solution de réponse, de sorte que cette question n'a donc pas besoin de rester ouverte (et «sans réponse»)
Vous comprenez que cela n'est pas portable. Linux ne supporte pas de stocker un temps de création. Un temps de création n'est également pas un temps de création, il s'agit de «changement» en fonction du répertoire, pas pour le fichier lui-même. Cela pourrait l'expliquer: Stackoverflow.com/a/4009369/128421
Réglage des heures de fichier à l'aide de
utime code> ne modifie pas la valeur renvoyée à l'aide de
MDLS -Name KMDItemContentCreationDate -raw code>.