В POSIX вы должны использовать find
:
if find "$source_file" -prune -newer "$target_file" | grep -q '^'; then
printf '%s\n' "$source_file is newer than $target_file"
else
echo "It's not newer or one of the files is not accessible"
fi
Для символических ссылок, который сравнивает mtime самих символических ссылок. Чтобы сравнить цели символических ссылок, добавьте параметр -H
или -L
.
Это предполагает, что $source_file
не начинается с -
и не соответствует ни одному из предикатов find
. Если вам нужно иметь дело с произвольными именами файлов, вам нужно сначала сделать следующее:
case $source_file in
(["-+()!"]*) source_file=./$source_file;;
esac
GNU и FreeBSD найти
реализации, по крайней мере, поддерживают гранулярность до доли секунды. AFAICT, macos, похоже, даже не хранит информацию о времени меньше секунды в атрибутах файла, по крайней мере, в файловой системе HFS +.
Обычно некоторые блоки резервируются для root, и они не учитываются как "доступные" в выводе df. Если ваша файловая система имеет 5% зарезервированных блоков и занимает 861 ГБ, то осталось 95%, или около 817 ГБ, что соответствует тому, что вы видите.
Этот вопрос U+L может быть уместен: Зарезервированное место для root в файловой системе - зачем?