Формат времени в формате UNIX

Можно ли отформатировать время выхода stat? Я использую

stat -c '%n %A %z' $filename

в bash script, но его формат времени - это не то, что я хочу. Можно ли изменить этот формат в команде или мне придется вручную сделать это позже?

Ниже показан пример вывода:

/lib drwxr-xr-x 2010-11-15 04:02:38.000000000 -0800

Ответ 1

Вы можете попробовать что-то вроде:

date -d "1970-01-01 + $(stat -c '%Z' $filename ) secs"

Это дает вам только дату. Вы можете форматировать дату, используя параметры форматирования даты (см. man date), например:

date -d "1970-01-01 + $(stat -c '%Z' $filename ) secs" '+%F %X'

Это не дает вам имя и разрешения, но вы можете сделать это, например:

echo "$(stat -c '%n %A' $filename) $(date -d "1970-01-01 + $(stat -c '%Z' $filename ) secs"  '+%F %X')"

Ответ 2

Вы можете просто разбить десятичную часть следующим образом:

stat -c '%n %A %z' "$filename" | sed 's/\(:[0-9]\{2\}\)\.[0-9]* /\1 /'

Edit:

Вот еще один способ усечения десятичной части:

stat -c '%n %A %.19z' "$filename"

Это зависит от даты длиной 19 символов: 2010-11-15 04:02:38