Modification des attributs «Date de création» et «Dernière modification» d'un fichier en un autre fichier

40

J'utilise cap de fusion pour créer un fichier pcap de fusion à partir de 15 fichiers. Pour le fichier fusionné, j'ai changé le nom en celui du premier des 15 fichiers. Mais je voudrais aussi changer les attributs du fichier fusionné tels que "Date de création" et "Dernière modification" par ceux du premier. Est-ce qu'il y a un moyen de faire ça?

FILES_dcn=($(find  $dir_dcn -maxdepth 1 -type f -name "*.pcap"  -print0 | xargs -0 ls -lt | tail -15 | awk '{print $9}'))
TAG1_dcn=$(basename "${FILES_dcn[14]}" | sed 's/.pcap//')
mergecap -w  "${dir_dcn}"/merge_dcn.pcap "${FILES_dcn[@]}"
mv  "${dir_dcn}"/merge_dcn.pcap  "${dir_dcn}"/"${TAG1_dcn}".pcap

J'essaie d'accéder aux fichiers fusionnés sur un serveur samba (Ubuntu). Ainsi, une fonction d’extraction peut accéder à l’extraction automatique des fichiers dans le dossier D. Mais comme la date de création sera modifiée pour le fichier fusionné, l'extraction échoue. Est-ce qu'il y a un moyen de réparer ceci?

Jishnu U Nair
la source

Réponses:

77

Vous pouvez utiliser la touchcommande avec le -rcommutateur pour appliquer les attributs d'un autre fichier à un fichier.

NOTE: La date de création n'existe pas sous Unix, il n'y a que l'accès, les modifications et les changements. Voir ce Q & A de U & L intitulé: Obtenir l’âge du fichier donné pour plus de détails.

$ touch -r goldenfile newfile

Exemple

Par exemple, voici un exemple goldenfilequi a été créé avec un horodatage arbitraire.

$ touch -d 20120101 goldenfile
$ ls -l goldenfile 
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

Maintenant je crée un nouveau fichier:

$ touch newfile
$ ls -l newfile 
-rw-rw-r--. 1 saml saml 0 Mar  7 09:06 newfile

Maintenant, appliquez goldenfileles attributs de newfile.

$ touch -r goldenfile newfile 
$ ls -l goldenfile newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 newfile
-rw-rw-r--. 1 saml saml 0 Jan  1  2012 goldenfile

A maintenant newfileles mêmes attributs.

Modifier via Samba

Je viens de confirmer que je pouvais le faire avec mon ordinateur portable Fedora 19, qui inclut la version 1.16.3-2 connectée à un NAS Thecus N12000 (utilise une version modifiée de CentOS 5.x).

J'ai pu toucher un fichier comme je l'ai mentionné ci-dessus et cela a fonctionné comme je l'ai décrit. Votre problème est probablement lié aux options de montage utilisées, ce qui peut entraîner l'omission du suivi de certains attributs de temps ou peut-être est-il lié à l'un de ces bogues:

slm
la source
@JishnuUNair - pouvez-vous vérifier comment le partage Samba est monté (avec quelles options)? Vous pouvez généralement les obtenir à partir de la mountcommande, puis rechercher le partage auquel vous accédez. Juste une supposition, mais il est probable qu'elle soit montée, utilisez gvfs en tant que système de fichiers FUSE.
slm
1
Un grand nombre de systèmes de fichiers prennent désormais en charge une période de création de fichier. Pour ext4, vous pouvez le visualiser / le modifier debugfs(bien que cela nécessite des privilèges root et ne soit pas utile ici). Voir cette question - unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4
Graeme
@Graeme - oui, je venais de faire référence à une méthode similaire à l'aide de stap: unix.stackexchange.com/questions/91197/… dans le salon de discussion.
slm
1
Bien que Linux ne prenne pas en charge l'heure de création, un partage Samba le peut. Selon sa configuration (et la prise en charge de xattr dans le système de fichiers), Samba peut stocker des horodatages dans Linux xattrs. Cela signifie qu'il peut être capable de faire des choses que le système de fichiers sous-jacent ne peut pas - comme signaler une heure de création valide (modifiable). Désolé, je n'ai trouvé aucun bon lien sur la façon dont cela fonctionne.
Peter
1
En réalité, la plupart des systèmes de fichiers Linux (par exemple ext4) prennent désormais en charge la date de création et Linux 4.11 sera statx()appelé pour le récupérer. Finalement.
Jez
37

Le moyen le plus simple - accès modifié modifié sera le même:

touch -a -m -t 201512180130.09 fileName.ext

Où:

-a = accessed
-m = modified
-t  = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Si vous souhaitez utiliser, NOWdéposez simplement le tet l'horodatage

Pour vérifier qu'ils sont tous les mêmes: stat fileName.ext

Voir: touch man

Jadeye
la source
5
D'une manière ou d'une autre, sur ubuntu 14.04, mettre -aavant -mne modifie pas le temps d'accès ... mettez-le après, donc:touch -m -a -t....
Jadeye le
5
-d time_stringpeut-être plus facile que -t: -d "2004-02-29 16:21:42"
mercredi