С zsh
:
#! /bin/zsh -
zmodload zsh/datetime # for $EPOCHREALTIME/strftime...
zmodload zsh/zselect # for sub-second sleeps
zmodload zsh/mathfunc # for int()
# wait till start of the next minute at first
for ((next = (EPOCHSECONDS / 60 + 1) * 60;; next += 60)) {
(( sleep = int((next - $EPOCHREALTIME) * 100) ))
(( sleep <= 0 )) || zselect -t $sleep
strftime -s now %T $next
nicstat -i eth1 1 60 > log-$now.txt &
}
Я добавил &
для асинхронного запуска nicstat
исходя из предположения, что nicstat 1 60
займет чуть более одной минуты. Затем, если бы мы запустили его синхронно (то есть без &
), он начал бы дрейфовать. Здесь мы следим за тем, чтобы nicstat
запускали точно каждую минуту.
Однако nicstat 1 60
занимает чуть более 59 секунд для запуска, а не 60, в первой строке отображается не статистика за 12:00:00 до 12:00:01, а общая статистика с момента загрузки (или с момента последнего сброса статистики). А вторая строка (обозначенная 12:00:01) предназначена для статистики с 12:00:00 до 12:00:01 (а 60-я строка после 59 секунд с пометкой 12:00:59 — для статистики с 12:00:58 до 12:00:59).
Статистика за 12:00:59 до 12:01:00 будет отсутствовать. Таким образом, вы можете изменить его на nicstat 1 61
, чтобы выходные данные содержали 61 строку, первую для статистики с момента загрузки и следующие 60 для статистики каждой секунды в эту минуту.
В качестве другого подхода к вашей проблеме вы можете запустить только один nicstat
и разбить awk
его выходные данные на файлы журнала:
nicstat -i eth1 1 | awk '
NR == 1 {header = $0; next}
!/^[012]/ {next} # skip other headers
{
log = "log-" substr($0, 1, 6) "00.log"
if (log != last_log) {
if (last_log) close(last_log)
print header > log
last_log = log
}
print > log
}'
На этот раз, за исключением первой строки без заголовка первого файла, каждая запись будет статистикой за прошедшее второе.
Похоже, проблема в том, что в zip-файле используются несогласованные варианты регистра для имен каталогов. Именно для этого и предназначена файловая система ciopfs : она обеспечивает просмотр дерева каталогов без учета регистра. Есть пакет Ubuntu. Создайте представление существующего каталога, смонтировав файловую систему ciopfs во временный каталог, распакуйте zip-архив внутри этого представления, и вы получите архив, извлеченный в исходный каталог.
mkdir ~/case-insensitive
ciopfs ~/temp ~/case-insensitive
cd ~/case-insensitive
unzip -x __MACOSX -x '__MACOSX/*' /path/to/zip
cd ~/temp
fusermount -u ~/case-insensitive
Если по какой-то причине это не сработает, моим следующим кандидатом будет Python zipfile
библиотека ( пример ).