Changer la date de création d'un fichier


62

Pourriez-vous s'il vous plaît laissez-moi savoir comment je peux changer la date de création d'un fichier dans Lion. Je me rends compte qu'il y a la commande touch-t mais cela ne fonctionne pas dans Lion. Quelques personnes ont mentionné une autre façon, mais je pense qu’elles ont écrit la solution en langage "codeur" plutôt qu'en langage profane - quelqu'un pourrait-il y répondre de la même manière qu'un profane peut l'exécuter?

Merci beaucoup pour votre aide.


L'explication du "codeur" sur laquelle d'autres personnes ont parlé est probablement une référence au "toucher". Vous devez ouvrir un terminal, accéder au dossier contenant le fichier, puis utiliser la commande tactile pour modifier la date de création du fichier.
Derek Knight

2
FWIW Vous êtes sur les bonnes lignes avec "touch-t", mais il y a un espace entre le h et le -. C'est "touch-t"
Derek Knight

Réponses:


95

touch -tne modifie normalement que les temps de modification et d'accès. L'heure de création ne change que si l'heure cible est antérieure à l'heure de création d'origine.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d change toujours l'heure de création.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile fait partie du package d'outils de ligne de commande pouvant être téléchargé à partir de developer.apple.com/downloads ou à partir des préférences de Xcode.


4
-m pour changer l'heure de modification.
AlikElzin-kilaka

5
À Yosemite, touch m'a obligé à utiliser le format +%Y%m%d%H%M.%S(remarquez le point entre les minutes et les secondes)
Calimo le

J'ai écrit une fonction appelée CpCreationDatedans fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal

15

Sous Mac OS X, il semble y avoir quatre horodatages différents associés à un fichier. Ces horodatages ne sont pas toujours mis à jour indépendamment les uns des autres, mais on peut avoir un contrôle individuel avec un peu de soins et à l' utilisation de touch, SetFileet chown(ou chmod). Pour voir cela, expérimentons et créons un nouveau fichier à partir de l'invite de commande #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

La première date indiquée correspond à l'heure du dernier accès ( atime), la seconde à la dernière modification ( mtime), la troisième au dernier changement de statut ( ctime), la quatrième à l'heure de la création du fichier (naissance, Btime), voir man lstat.

Pour modifier l'heure d'accès ( atime) à une heure spécifiée, utilisez:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Pour modifier l’heure de modification ( mtime) et l’ heure de création du fichier ( Btime) sur une heure spécifiée, utilisez:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Apparemment, cela met également automatiquement à jour l'heure du dernier changement d'état ( ctime) avec l'heure système actuelle!

Pour modifier uniquement le moment de création / naissance ( Btime) à un moment donné, utilisez (comme proposé par d'autres ci-dessus):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Pour modifier uniquement l'heure du dernier changement d'état ( ctime) en fonction de l'heure système actuelle, utilisez par exemple:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

usernameest le propriétaire du fichier (tel que rapporté par statou ls -l). Cela ne change pas la propriété du fichier, mais accède à l'inode du fichier et l'enregistre comme heure de la dernière modification de statut. Malheureusement, il n'est pas possible de spécifier explicitement l'heure ici autrement qu'en changeant l'heure de l'ordinateur ...

En résumé, pour pouvoir changer les quatre horodatages indépendamment, on peut utiliser (dans cet ordre pour les trois derniers):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [régler la date du système] chown username <file>[revenir à la date système normale]

(Bien entendu, la réinitialisation de la date système peut ne pas être une opération sans risque, vous en avez été averti.)


+1 Merci pour cette réponse super détaillée. Cela a résolu tous mes problèmes.
Govind Rai

13

La commande en ligne de touchcommande fonctionne dans Lion, mais vous avez besoin d’un peu d’information sur son utilisation.

Tout d'abord, vous devez le saisir, ce n'est pas un utilitaire qui fonctionne graphiquement dans une fenêtre. L'endroit dans lequel vous tapez est une application appelée Terminal . Vous pouvez le trouver dans votre dossier Utilitaires ou utiliser la recherche Spotlight pour le trouver.

Une fois que vous l'avez démarré, vous obtenez une fenêtre de ligne de commande dans laquelle vous pouvez taper des commandes. Ce n'est pas parce que vous tapez que cela a quelque chose à voir avec le codage, mais pour quelqu'un de nouveau avec les commandes "à l'ancienne" du système d'exploitation, cela peut paraître un peu intimidant.

Ainsi, la commande s'appelle touch , et après la commande, vous pouvez passer divers paramètres, le seul requis étant le nom de fichier. En tapant ce qui suit, vous définissez la date de dernière modification du fichier sur l'heure actuelle:

touch filename

Bien sûr, vous devrez peut-être d'abord trouver le fichier, ce qui nécessitera peut-être des commandes supplémentaires pour y accéder. la commande cd ou Change Directory aide ici:

cd ~/Desktop/files/PDFs
touch filename

Ou, vous pouvez simplement ajouter le chemin complet au fichier dans le cadre de la commande:

touch ~/Desktop/files/PDFs/filename

Une utilisation plus avancée de la commande tactile vous permet de spécifier l'heure que vous souhaitez définir, plutôt que d'utiliser l'heure d'exécution, de définir l'accès au lieu des heures de modification, etc. C'est ce que font des paramètres tels que -t et d'autres. Certains définissent le temps comme étant le temps d'un autre fichier, d'autres le définissent pour revenir en arrière ou avancer d'un temps égal à X ( voir ici pour plus de détails), par exemple:

touch -d '1 May 2005 10:22' file8

Ce qui suit est tiré de cette page, qui est également une référence utile et un excellent exemple avec quelques conseils pour ceux qui ne sont pas à l'aise avec les emplacements de fichiers sur la ligne de commande.

Notez que cela ne modifiera les attributs de date de modification et de date de création que si votre fichier a été créé après la date que vous avez entrée. En effet, un fichier ne peut pas être modifié avant sa création. Si créé avant la date que vous avez définie, seule la date modifiée sera modifiée.

Comment changer l'attribut date créé d'un fichier?

  1. Ouvrez l'application Terminal ( /Applications/Utilities/Terminal.app) ou si vous préférez utiliser iTerm.

  2. Tapez ceci dans Terminal (sans appuyer sur entrée / retour) en insérant la date au format suivant YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Ouvrez une fenêtre du Finder et localisez le fichier que vous souhaitez modifier, puis faites-le glisser dans la fenêtre du terminal. L'emplacement du fichier sera ensuite inséré à l'aide de la terminologie de la ligne de commande. Voici un exemple de ce qui devrait être saisi dans le terminal à ce stade:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    201212211111 dans l'exemple ci-dessus représente «21 décembre 2012 11 h 11


2
Mais touchmodifie la date de modification, pas la date de création du fichier.
Daniel

1
Il peut faire les deux. Dépend des paramètres.
Stuffe

2
L'utilisation touchdes paramètres que vous avez indiqués ci-dessus a modifié la modification mais pas les dates de création de mon fichier de test.
Daniel

2
@ Daniel Vous avez probablement obtenu votre réponse, mais par souci de détail, la date de création touch est modifiée en fonction des arguments. Si vous indiquez une date de modification antérieure à la date de création du fichier, celle-ci sera automatiquement remplacée par la nouvelle valeur de date de modification, car un fichier ne peut pas être modifié avant sa création.
Govind Rai

2
Je viens d'essayer cela sur Sierra et le toucher ne change définitivement pas la creationdate. Je pouvais changer accesset modifieddate à une "date dans le passé", mais cela ne modifie pas la date de création. Consultez la page de manuel pour le toucher, il ne mentionne pas la date de création. Système de fichiers: Mac OS étendu (journalisé, crypté). Utilisation SetFile -d "$(GetFileInfo -m test.txt)" file.txta parfaitement fonctionné.
Jonathan Cross

7

Les grandes allusions ici, en particulier le dernier (de Lauri Ranta, a répondu le 21 août à 15h21). Perfekt!

J'utilise maintenant un simple flux de travail Automator pour modifier par lots plusieurs fichiers:

  1. Obtenir les éléments sélectionnés du Finder
  2. Run Shell Script, "Pass input: as arguments"

Le script shell est:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Cela fonctionne comme un charme.


0

Le moyen le plus simple que j'ai trouvé était de créer un nouveau dossier, de copier tous les sous-dossiers du dossier grisé dans le nouveau dossier, et le tour est joué, le nouveau dossier n'est pas grisé. Vous pouvez même le faire dans le viseur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.