Как получить дату/время создания файла в Bash / Debian?



Я использую Bash на Debian GNU / Linux 6.0. Можно ли получить дату/время создания файла? Не дата/время изменения.
ls -lh a.txt и stat -c %y a.txt оба только дают время модификации.

1708   11  

11 ответов:

к сожалению, Ваш квест будет невозможен в целом, так как для каждого из ваших файлов хранятся только 3 различных значения времени, определенных стандартом POSIX (см. базовые определения раздел 4.8 файл раз обновить)

каждый файл имеет три различных связанных временных метки: время последнего доступ к данным, время последнего изменения данных и время файла последнее изменение статуса. Эти значения возвращаются в файле структура характеристик struct stat, как описано в .

EDIT: как указано в комментариях ниже, в зависимости от используемой файловой системы метаданные могут содержать дату создания файла. Обратите внимание, однако хранение такой информации не является стандартным. В зависимости от этого может привести к проблемам переносимости перемещения в другую файловую систему, в случае, если тот, который фактически используется, каким-то образом сохраняет его в любом случае.

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

mikyra это хорошо.Дело в том, что именно так он и сказал.

[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

Если вы хотите проверить, какой файл был создан первым, вы можете структурировать имя файла, добавив системную дату при создании серии файлов.

обратите внимание, что если у вас есть файловая система, смонтированная с noatime по соображениям производительности, то atime, скорее всего, покажет время создания. Учитывая, что noatime приводит к значительному повышению производительности (путем удаления записи на диск при каждом чтении файла), это может быть разумный вариант конфигурации, который также дает вам желаемые результаты.

Дата/Время создания обычно не сохраняется. Так что нет, вы не можете.

меню ls-I.xml

меню 94490.XML Здесь число 94490 представляет собой индекс

затем:

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

чтобы найти точку монтирования корневой файловой системы"/", потому что меню файлов.xml находится на ' / 'то есть' /dev / mapper/vg-root'

debugfs-R 'stat ' /dev/mapper/vg-root

выход может быть как один ниже:

debugfs-R ' stat ' /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:s00" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2

где вы можете увидеть время создания:

ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013

вы можете найти время создания-ака время рождения-с помощью стат а также матч с помощью найти.
у нас есть эти файлы, показывая время последнего изменения:

$ 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

найти файлы, созданные в течение определенного периода времени, используя найти как ниже.
очевидно, что файловая система знает о времени рождения файл:

$ 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


мы можем подтвердить это с помощью 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


стат man pages объясняет %w:

%w     time of file birth, human-readable; - if unknown

Как объяснил @mikyra, время создания даты нигде не хранится.

все вышеперечисленные методы хороши, но если вы хотите быстро получить только последнюю дату изменения, вы можете ввести:

ls -lit /path

С - t опция вы перечисляете все файлы в / path odered по дате последнего изменения.

Если вы действительно хотите достичь этого, вы можете использовать файловый наблюдатель, например inotifywait.

вы смотрите каталог и сохраняете информацию о создании файлов в отдельном файле за пределами этого каталога.

while true; do
  change=$(inotifywait -e close_write,moved_to,create .)
  change=${change#./ * }
  if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done

поскольку время создания не сохраняется, вы можете построить свою собственную систему на основе inotify.

цитируется из https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/131347#131347, следующий shellscript будет работать, чтобы получить время создания:

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
}

еще лучше:

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

Ср 20 Июля 19:25: 48 2016

Comments

    Ничего не найдено.