Вот другая альтернатива:
echo -n "foo" | openssl sha1 | awk '{print $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
Вот:
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
может сказать пару даты и времени от новой записи в целом.select
циклselect
цикл, чтобы избежать необходимости повторно анализировать даты каждого повторного выполнения цикла.
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$1
все еще будьте тем же прежде и после? – BrainStone 29.08.2013, 03:38set -- ...
устанавливает оболочку позиционные параметры, применяя IFS к тексту, который следует--
. '$ (...)' выполняет команду и заменяет себя стандартным выводом команды.dir -1 backups
вывод передается по каналу в awk сценарий который для всех строк, соответствующих regexComplete\\ Backup\\ .*\.tar\.bz2
, это разделяет обратные косые черты, затем "Полный Резервный" текст, затем ".tar.bz2", и наконец "-". mktime Awk () берет результат (YYYY MM DD HH MM SS) и... – ash 29.08.2013, 03:52