J'utilise Bash sous Debian GNU/Linux 6.0. Est-il possible d'obtenir la date/heure de création du fichier? Pas la date/heure de modification. ls -lh a.txt
et stat -c %y a.txt
ne donnent que l'heure de modification.
Malheureusement, votre quête ne sera pas possible en général, car il n'y a que 3 valeurs de temps distinctes stockées pour chacun de vos fichiers, telles que définies par le standard POSIX (voir Section Définitions de la base 4.8 Mise à jour des temps de fichier )
Chaque fichier a trois horodatages associés distincts: l'heure du dernier accès aux données, l'heure de la dernière modification des données et l'heure de la dernière modification du statut du fichier. Ces valeurs sont renvoyées dans la structure de caractéristiques du fichier , struct stat , comme décrit dans la section <sys/stat.h> .
EDIT: Comme mentionné dans les commentaires ci-dessous, selon le système de fichiers utilisé, les métadonnées peuvent contenir une date de création de fichier. Notez cependant que le stockage d'informations de ce type n'est pas standard. En fonction de cela, des problèmes de portabilité peuvent survenir lors du transfert vers un autre système de fichiers, au cas où celui-ci serait effectivement utilisé.
ls -i file #output is for me 68551981
debugfs -R 'stat <68551981>' /dev/sda3 # /dev/sda3 is the disk on which the file exists
#results - crtime value
[root@loft9156 ~]# debugfs -R 'stat <68551981>' /dev/sda3
debugfs 1.41.12 (17-May-2010)
Inode: 68551981 Type: regular Mode: 0644 Flags: 0x80000
Generation: 769802755 Version: 0x00000000:00000001
User: 0 Group: 0 Size: 38973440
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 76128
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
atime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013
mtime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
**crtime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013**
Size of extra inode fields: 28
EXTENTS:
(0-511): 352633728-352634239, (512-1023): 352634368-352634879, (1024-2047): 288392192-288393215, (2048-4095): 355803136-355805183, (4096-6143): 357941248-357943295, (6144
-9514): 357961728-357965098
la réponse de Mikyra est bonne.Le fait, tout comme ce qu'il a dit.
[jason@rh5 test]$ stat test.txt
File: `test.txt'
Size: 0 Blocks: 8 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 588720 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 500/ jason) Gid: ( 500/ jason)
Access: 2013-03-14 01:58:12.000000000 -0700
Modify: 2013-03-14 01:58:12.000000000 -0700
Change: 2013-03-14 01:58:12.000000000 -0700
si vous voulez vérifier quel fichier a été créé en premier, vous pouvez structurer votre nom de fichier en ajoutant la date système lorsque vous créez une série de fichiers.
Notez que si votre système de fichiers est monté avec noatime pour des raisons de performances, il affichera probablement l'heure de création. Étant donné que noatime entraîne une amélioration considérable des performances (en supprimant une écriture sur disque à chaque lecture d'un fichier), il peut s'agir d'une option de configuration judicieuse qui vous donne également les résultats souhaités.
94490 menus.xml Ici le nombre 94490 représente l'inode
Alors fais un:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-root 4.0G 3.4G 408M 90% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 124M 27M 92M 23% /boot
/dev/mapper/vg-var 7.9G 1.1G 6.5G 15% /var
Pour trouver le point de montage du système de fichiers racine "/", car le fichier menus.xml se trouve sur "/", c'est-à-dire "/ dev/mapper/vg-root".
La sortie peut ressembler à celle ci-dessous:
debugfs 1.41.12 (17-May-2010)
Inode: 94490 Type: regular Mode: 0644 Flags: 0x0
Generation: 2826123170 Version: 0x00000000
User: 0 Group: 0 Size: 4441
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
atime: 0x5266e47b -- Wed Oct 23 09:47:55 2013
mtime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
Size of extra inode fields: 4
Extended attributes stored in inode body:
selinux = "unconfined_u:object_r:usr_t:s0\000" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2
Où vous pouvez voir le moment de la création:
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
La date/heure de création est normalement non enregistrée. Donc non, vous ne pouvez pas.
Vous pouvez trouver le moment de la création - c'est-à-dire l'heure de la naissance - en utilisant stat et également en utilisant find.
Nous avons ces fichiers avec l'heure de la dernière modification:
$ ls -l --time-style=long-iso | sort -k6
total 692
-rwxrwx---+ 1 XXXX XXXX 249159 2013-05-31 14:47 Getting Started.pdf
-rwxrwx---+ 1 XXXX XXXX 275799 2013-12-30 21:12 TheScienceofGettingRich.pdf
-rwxrwx---+ 1 XXXX XXXX 25600 2015-05-07 18:52 Thumbs.db
-rwxrwx---+ 1 XXXX XXXX 148051 2015-05-07 18:55 AsAManThinketh.pdf
Pour trouver des fichiers créés dans un laps de temps donné, utilisez find comme ci-dessous.
De toute évidence, le système de fichiers connaît l'heure de naissance d'un fichier:
$ find -newerBt '2014-06-13' ! -newerBt '2014-06-13 12:16:10' -ls
20547673299906851 148 -rwxrwx--- 1 XXXX XXXX 148051 May 7 18:55 ./AsAManThinketh.pdf
1407374883582246 244 -rwxrwx--- 1 XXXX XXXX 249159 May 31 2013 ./Getting\ Started.pdf
Nous pouvons le confirmer en utilisant stat:
$ stat -c "%w %n" * | sort
2014-06-13 12:16:03.873778400 +0100 AsAManThinketh.pdf
2014-06-13 12:16:04.006872500 +0100 Getting Started.pdf
2014-06-13 12:16:29.607075500 +0100 TheScienceofGettingRich.pdf
2015-05-07 18:32:26.938446200 +0100 Thumbs.db
stat pages de manuel explique% w:
%w time of file birth, human-readable; - if unknown
Comme @mikyra l'a expliqué, l'heure de la création n'est pas stockée nulle part.
Toutes les méthodes ci-dessus sont agréables, mais si vous souhaitez obtenir rapidement la date de dernière modification, vous pouvez taper:
ls -lit /path
avec l’option - t vous listez tous les fichiers dans/chemin indiqué par la date de dernière modification.
Si vous voulez vraiment y parvenir, vous pouvez utiliser un observateur de fichiers tel que inotifywait .
Vous regardez un répertoire et vous enregistrez les informations sur les créations de fichiers dans des fichiers séparés en dehors de ce répertoire.
while true; do
change=$(inotifywait -e close_write,moved_to,create .)
change=${change#./ * }
if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done
Comme aucune heure de création n'est stockée, vous pouvez construire votre propre système basé sur inotify.
encore mieux:
lsct ()
{
debugfs -R 'stat <'`ls -i "$1" | (read a b;echo -n $a)`'>' `df "$1" | (read a; read a b; echo "$a")` 2> /dev/null | grep --color=auto crtime | ( read a b c d;
echo $d )
}
Mer 20 juil 19:25:48 2016
Cité de https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/131347#131347 , le shellscript suivant fonctionnerait pour obtenir le temps de création:
get_crtime() {
for target in "${@}"; do
inode=$(stat -c %i "${target}")
fs=$(df "${target}" | tail -1 | awk '{print $1}')
crtime=$(Sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
Une autre astuce à ajouter à votre arsenal est la suivante:
$ grep -r "Copyright" /<path-to-source-files>/src
En règle générale, si l’on modifie un fichier, il doit réclamer un crédit dans la section “Copyright”. Examinez les résultats pour connaître les dates, les noms de fichier, les contributeurs et les adresses électroniques des contacts.
exemple résultat grep:
/<path>/src/someobject.h: * Copyright 2007-2012 <creator's name> <creator's email>(at)<some URL>>