find <dir> -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1
возвращает строку в форме:
<seconds since epoch[1]><tab><filename>
Псевдоним или вставить в сценарий, как в следующем примере, чтобы напечатать имя файла или дату.
Давайте создадим дерево тестирования:
$ date -u; mkdir -p a/{b,c,d}/{e,f,g}
Sat May 28 17:37:52 UTC 2011
$ date -u; touch a/{b,c,d}/{e,f,g}/{foo,bar,baz}; sleep 1; date -u; touch a/c/f/bar
Sat May 28 17:38:17 UTC 2011
Sat May 28 17:38:18 UTC 2011
Получить дату: с
$ date -ud @$(find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)
Sat May 28 17:38:18 UTC 2011
Получить путь к файлу:
$ find a -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f2
a/c/f/bar
[1]: См. Время Unix в Википедии для объяснения "эпохи Unix".
Пример сценария:
#!/bin/sh
if test ! -d "${1:-.}"
then
echo not a directory: ${1:-.} >&2
exit 1
fi
date -d @$(find "${1:-.}" -type f -printf '%T@\t%p\n' | sort -r -k1 | head -n1 | cut -f1)
Вызов с или без <dir>
качестве аргумента. Он будет использовать текущий каталог без.