A hora de nascimento está em vários sistemas de arquivos nativos do Linux, não apenas ext4.
Desde a versão 4.11 do kernel do Linux (abril de 2017), há um novo < href="http://man7.org/linux/man-pages/man2/statx.2.html"> statx()
chamada de sistema para recuperá-la. No entanto, a função wrapper correspondente não foi adicionada ao GNU libc ainda (a partir de 2018-06-26. 2019 edit agora adicionada em 2.28), e ferramentas como o GNU stat
, ls
, find
não foram atualizados para usá-lo.
Você poderia fazer isso em perl
com algo como:
perl -MPOSIX -e '
require "syscall.ph";
$buf = "printf '#include <syscall.h>\n__NR_statx\n' | gcc -E -xc - | tail -n 1
" x 0x100; # enough space for a struct statx
for (@ARGV) {
# hardcode: AT_FDCWD == -100
# AT_SYMLINK_NOFOLLOW = 0x100 (lstat()-like)
# STATX_BTIME = 0x800 for the mask
# 80: offset of the btime in the struct
syscall(&SYS_statx, -100, $_, 0x100, 0x800, $buf) == 0
or die "$_: $!\n";
($t, $n) = unpack("x80QQ", $buf);
$n = sprintf("%09d", $n);
print strftime("%F %T.$n %z\n", localtime $t)
}' -- "$file"
Se o seu syscall.ph
não tiver SYS_statx
, você poderá codificá-lo também. É 332 em arquiteturas AMD64. Ou tente:
perl -MPOSIX -e '
require "syscall.ph";
$buf = "printf '#include <syscall.h>\n__NR_statx\n' | gcc -E -xc - | tail -n 1
" x 0x100; # enough space for a struct statx
for (@ARGV) {
# hardcode: AT_FDCWD == -100
# AT_SYMLINK_NOFOLLOW = 0x100 (lstat()-like)
# STATX_BTIME = 0x800 for the mask
# 80: offset of the btime in the struct
syscall(&SYS_statx, -100, $_, 0x100, 0x800, $buf) == 0
or die "$_: $!\n";
($t, $n) = unpack("x80QQ", $buf);
$n = sprintf("%09d", $n);
print strftime("%F %T.$n %z\n", localtime $t)
}' -- "$file"
Agora que o horário de nascimento raramente é útil. Não é a idade dos dados no arquivo (os dados são gravados em arquivos após terem sido criados), nem necessariamente a hora em que o arquivo apareceu por esse nome em um diretório (poderia ter sido criado como um nome diferente e renomeado ou vinculado lá e o conteúdo ou atributos foram alterados várias vezes entre eles).