преобразование даты в секунды в unix

Есть несколько различных способов сделать это, в зависимости от того, что вы хотите сделать с информацией.

  • Если вам нужен список каталогов, которые непосредственно содержат .pdf файлы (т.е. только на верхнем уровне, не в подкаталогах), я бы сделал так:

    dirname */*.pdf | sort | uniq
    
  • Если вам нужен список каталогов, содержащих файлы .pdf на любом уровне (то есть они могут находиться в подкаталогах каталога), попробуйте

    find . -name '*.pdf' | cut -d/ -f2 | sort | uniq
    

    или, если вы хотите искать только в определенных подкаталогах,

    find Abc Qwe Zxc Rty -name '*.pdf' | cut -d/ -f1 | sort | uniq
    
  • Если вам нужен список всех файлов .pdf в подкаталогах, то это просто

    find . -name '*.pdf'
    
  • Если вам нужен подсчет .pdf файлов в каждом каталоге, для подсчета только файлов верхнего уровня я бы использовал

    dirname */*.pdf | sort | uniq -c
    

    или для включения файлов в подкаталогах

    find . -name '*.pdf' | cut -d/ -f2 | sort | uniq -c
    

    (вы можете увидеть разницу, просто добавив опцию -c к uniq).

1
20.02.2019, 14:36
1 ответ

При этомksh93(часто устанавливается по умолчанию на коммерческих системах на основе SysV, таких как AIX или Solaris ), что также является /bin/shдля Solaris 11 и более поздних версий:

date=2019-02-08T19:24:30.220Z
export LC_ALL=C # to make sure the decimal radix is "."
then_in_seconds=$(printf '%(%s.%N)T\n' "$date")
now_in_seconds=$(printf '%(%s.%N)T\n' now)
difference_in_seconds=$((now_in_seconds - then_in_seconds))
difference_in_24h_periods=$((difference_in_seconds / 24 / 60 / 60))
echo "Result: $difference_in_24h_periods"

At 2019 -02 -20T11 :17 :30Z и немного, что дало мне:

Result: 11.6618110817684377

Вы можете использовать $((f(difference_in_24h_periods))), где fявляется одним из round, floor, ceil, nearbyint, trunc, rint, int, как в C, если вы хотите разность как целое число или используйте спецификации формата printf, чтобы указать количество значащих цифр.

Сzsh:

zmodload zsh/datetime
date=2019-02-08T19:24:30.220Z
TZ=UTC0 strftime -rs then_in_seconds '%Y-%m-%dT%H:%M:%S' "${date%.*}"
then_in_seconds+=.${${date##*.}%Z}
now_in_seconds=$EPOCHREALTIME
difference_in_seconds=$((now_in_seconds - then_in_seconds))
difference_in_24h_periods=$((difference_in_seconds / 24 / 60 / 60))
echo "Result: $difference_in_24h_periods"
4
27.01.2020, 23:18

Теги

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