Прошедшее время сценария bash (дни/минуты/секунды)

Обратите внимание, что это не имеет ничего общего с Linux; этот предикат -printfспецифичен для реализации GNU find. Linux - это не ОС, это просто ядро, которое есть в ряде ОС. Хотя в прошлом большинство этих ОС использовали пользовательскую среду GNU, теперь подавляющее большинство ОС, использующих Linux, являются встроенными и имеют базовые команды, если они есть.

Команду GNU find, предшествовавшую Linux, можно установить на большинство Unix -подобных операционных систем. Он определенно использовался в Solaris (под названием SunOS тогда )до выхода Linux.

В настоящее время он доступен даже в виде пакета Oracle для Solaris. В Solaris 11 это находится в file/gnu-findutils, и команда названаgfind(для GNU find, чтобы отличить ее от собственной системной команды find).

Теперь, если вы не можете установить пакеты, лучше всего использоватьperl:

find data/ -type f -name "temp*" -exec perl -MPOSIX -le '
  for (@ARGV) {
    unless(@s = lstat($_)) {
      warn "$_: $!\n";
      next;
    }
    print strftime("%Y-%m-%d", localtime($s[9])). " $_";
  }' {} + | sort -r

Здесь мы все еще используемfind(реализацию Solaris )для поиска файлов, но мы используем ее предикат -execдля передачи списка файлов в perl. И perlвыполняет lstat()для каждого из них для извлечения метаданных файла (, включая время модификации в качестве 10-го элемента ($s[9])), интерпретирует его в местном часовом поясе(localtime())и форматирует (strftime()), который затем prints рядом с именем файла($_— это переменная цикла, если она не указана в perl, а $!эквивалентно stderror(errno)— тексту ошибки для последнего сбоя системного вызова ).

0
26.05.2020, 17:07
1 ответ

Дополнительно:time bash script.sh

0
18.03.2021, 23:32

Теги

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