Преобразуйте список файлов (с датой) в список дат

Вот другая альтернатива:

echo -n "foo" | openssl sha1 | awk '{print $2}'
0
29.08.2013, 00:28
2 ответа

Следующее переформатирует даты:

dir -1 backups | awk '/Complete\\ Backup\\ .*\.tar\.bz2/ { gsub(/\\/, ""); sub(/Complete Backup /, ""); sub(/.tar.bz2/, ""); gsub(/-/, " "); print strftime("%c", mktime($0)); }'

И вот способ получить это в выбор:

OIFS="$IFS"; IFS=$'\n'; set -- $(dir -1 backups | awk '/Complete\\ Backup\\ .*\.tar\.bz2/ { gsub(/\\/, ""); sub(/Complete Backup /, ""); sub(/.tar.bz2/, ""); gsub(/-/, " "); print strftime("%c", mktime($0)); }'); IFS="$OIFS"
select date in "$@"; do echo "$date"; done

Вот версия, которая сортирует даты:

OIFS="$IFS"
IFS=$'\n'

set -- $(
    dir -1 backups |
    awk '/Complete\\ Backup\\ .*\.tar\.bz2/ \
         {
            gsub(/\\/, "");
            sub(/Complete Backup /, "");
            sub(/.tar.bz2/, "");
            gsub(/-/, " ");
            VAL[NR] = mktime($0);
         }

         END \
         {
            for ( i = asort(VAL); i > 0; i-- )
            {
                    print strftime("%a %b %d %T %Z %Y", VAL[i]);
            }
         }'
    )

IFS="$OIFS"

select date in "$@"
do
    echo "$date"
done
2
28.01.2020, 02:28
  • 1
    Похоже на упущение этого dir Escape располагают с интервалами как \ . По крайней мере, я не получаю вывода или ошибки: awk: cmd. line:1: (FILENAME=- FNR=1) fatal: strftime: second argument less than 0 or too big for time_t –  BrainStone 29.08.2013, 03:19
  • 2
    , извинения - ls являются моим предпочтительным оружием, я зафиксирую его. английский язык –  ash 29.08.2013, 03:28
  • 3
    является им возможный отсортировать его так, чтобы это было sortet, убывающим по дате? (Самый ранний первый, последний последний), И это влияет на параметры, данные сценарию? Meaing был бы $1 все еще будьте тем же прежде и после? –  BrainStone 29.08.2013, 03:38
  • 4
    Вот короткое объяснение. IFS изменяется, как оболочка разделяет значения. OIFS просто сохраняет IFS. set -- ... устанавливает оболочку позиционные параметры, применяя IFS к тексту, который следует --. '$ (...)' выполняет команду и заменяет себя стандартным выводом команды. dir -1 backups вывод передается по каналу в awk сценарий который для всех строк, соответствующих regex Complete\\ Backup\\ .*\.tar\.bz2, это разделяет обратные косые черты, затем "Полный Резервный" текст, затем ".tar.bz2", и наконец "-". mktime Awk () берет результат (YYYY MM DD HH MM SS) и... –  ash 29.08.2013, 03:52
  • 5
    ... превращает его в значение time_t (секунды с ЭПОХИ). Wheh, хорошо не короткий - но быстрый. В отсортированной версии это помещает то значение в ассоциативный массив, индексированный с методической точностью число (номер строки не действительно важен). Затем блок КОНЦА выполняется в конце входа к awk, и в то время, он печатает отформатированную дату. Ой... забыл сортировать. установка MTU –  ash 29.08.2013, 03:54

Вот:

dates=($(for i in backups/*.tar.bz2;do #Glob eliminates need to list all files
             date=${i/Complete Backup /} #Remove "Complete Backup "
             date=${date%%.*} #Remove ".tar.bz2"
             date=${date/ /,} #Substitue , for space
             echo $date #Echo the date for sed
         done|sed -e 's/\([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)$/\1:\2:\3/'|sort -r|xargs echo))
select date in ${dates[@]};do
    echo "$date"
done

Еще одна вещь: если Вы используете это для a select цикл, как Вы собираетесь сказать различные даты независимо, когда они разделены пробелом? Я подразумеваю, что Вы используете пространство для разделения даты со времени также, таким образом, это могло бы быть источником беспорядка.

Править

  • Добавленная сортировка дат от самых старых до новейших начиная с Ваших комментариев указывает на необходимость в них, отсортировал тот путь.
  • Добавленный код для разделения даты и времени запятой так, чтобы select может сказать пару даты и времени от новой записи в целом.
  • Перенесенный целое в a select цикл Сохранил даты в массив, который затем выполнен с помощью итераций a select цикл, чтобы избежать необходимости повторно анализировать даты каждого повторного выполнения цикла.
1
28.01.2020, 02:28

Теги

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