Получение времени модификации файла в оболочке POSIX

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

2
13.01.2020, 23:35
3 ответа

Единственный интерфейс POSIX CLI (и утилиты )для системных вызовов lstat()и stat()lsБоюсь, и его вывод не может быть -надежно обработан.

Уловка может состоять в том, чтобы использоватьpax -x ustar(как команду pax, так и ее формат ustar, указанные )для создания файла tarс файлом в нем и извлечения метки времени из файла.

echo "$((0$(pax -x ustar -wd -- "$file" |
    dd 2> /dev/null bs=4 skip=34 count=3 | tr -d '\0')))"

mtimeсохраняется по смещению 136 как восьмеричное число.

Однако он обременен всеми ограничениями формата US -tar.

Для переноса лучше всего использовать perlилиpython:

perl -MPOSIX -le '
  for (@ARGV) {
    if (@s = lstat$_) {print $s[9]} else {warn "$_: $!\n"}
  }' -- "$file"

(отмечают, что он не включает наносекунду, доступную во многих современных системах. Вы можете получить его, например, через модуль Time::HiRes, но это предполагает, что он установлен и относится к последней версии ).

5
27.01.2020, 21:55

Если вы используете ОС, совместимую с POSIX (, как следует из вашего вопроса ), есть хороший способ сделать это с помощью pax, который позволяет получить даже доли секунды.

Звонок:

pax -xpax -wd -- "$file" | dd 2> /dev/null skip=1 count=1 |
    grep ' mtime=' | sed 's/.*mtime=//'

Если я позвоню:

pax -xpax -wd -- /etc/passwd | dd 2> /dev/null skip=1 count=1 |
    grep ' mtime=' | sed 's/.*mtime=//'

Я понял:

1572569707.797017689
0
27.01.2020, 21:55

Это довольно просто реализовать, но вот вариант, использующий python.

#-- cross-platform workaround, see https://unix.stackexchange.com/q/561927/3097
alias stat_mtime='python -c "print(__import__(\"os\").stat(__import__(\"sys\").argv[1]).st_mtime)"'

$ stat_mtime /dev/null
1624731195.3483574
0
01.07.2021, 11:52

Теги

Похожие вопросы