Comment obtenir la date/heure de création de fichier dans Bash/Debian?
J'utilise Bash sur Debian GNU/Linux 6.0. Est-il possible d'obtenir la date/heure de création du fichier? Pas la modification de la date/heure.
ls -lh a.txt
et stat -c %y a.txt
ne donnent que le temps de modification.
11 réponses
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 tels que définis par la norme POSIX (voir définitions de Base section 4.8 mise à jour des temps de fichier )
chaque fichier a trois timestamps associés distincts: le temps de la dernière l'accès aux données, l'Heure de la dernière modification des données et l'heure du fichier dernier changement de statut. Ces valeurs sont retournées dans le fichier caractéristiques de la structure struct stat , comme décrit dans
.
modifier: comme indiqué dans les commentaires ci-dessous, en fonction du système de fichiers utilisé, les métadonnées peuvent contenir la date de création du fichier. Notez cependant que le stockage de telles informations n'est pas standard. Selon elle peut conduire à des problèmes de portabilité à passer à un autre système de fichiers, dans le cas où celui réellement utilisé stocke de toute façon.
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 est 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 que le fichier a été créé en premier,vous pouvez structurer votre nom de fichier en ajoutant la date du système lorsque vous créez une série de fichiers.
notez que si vous avez votre système de fichiers monté avec noatime pour des raisons de performance, alors l'atime affichera probablement l'Heure de création. Étant donné que noatime donne un coup de pouce massif aux performances (en supprimant une écriture de disque pour chaque fois qu'un fichier est lu), il peut être une option de configuration raisonnable qui vous donne également les résultats que vous voulez.
LS-I menus.xml
94490 menus.XML Ici le numéro 94490 représente inode
Puis:
df-h
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 les menus de fichier.xml est sur '/' c'est-à-dire '/dev/mapper / vg-root '
debugfs-R ' stat <94490>' / dev/mapper /vg-root
la sortie peut être comme celle ci-dessous:
debugfs-R ' stat <94490>' / dev/mapper /vg-root
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"151910920"0" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2
où vous pouvez voir le temps de création:
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
vous pouvez trouver le temps de création - alias le temps de naissance - en utilisant stat et aussi correspondre en utilisant trouver .
nous avons ces fichiers montrant 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 certain délai en utilisant pour trouver 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 man pages explains %w:
%w time of file birth, human-readable; - if unknown
comme @mikyra l'a expliqué, la date de création n'est stockée nulle part.
toutes les méthodes ci-dessus sont jolies, mais si vous voulez obtenir rapidement la date de dernière modification, vous pouvez taper:
ls -lit /path
avec l'option - t vous énumérez tous les fichiers dans /path odered par dernière date de modification.
si vous voulez vraiment atteindre que vous pouvez utiliser un observateur de fichier comme inotifywait .
vous regardez un répertoire et vous enregistrez des informations sur les créations de fichiers dans un fichier séparé 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 aucun temps de création n'est stocké, vous pouvez construire votre propre système basé sur inotify.
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 }')
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
encore mieux:
lsct ()
{
debugfs -R 'stat <'`ls -i "" | (read a b;echo -n $a)`'>' `df "" | (read a; read a b; echo "$a")` 2> /dev/null | grep --color=auto crtime | ( read a b c d;
echo $d )
}
lsct /etc
Wed Jul 20 19:25: 48 2016