В некоторые части вашего scope.sh
можно включить команды для проверки размера файла.
Сначала добавьте новую функцию (и вставьте код выше handle_extension()
вscope.sh
):
drop_bigsize() {
# 51200 == 50 MB * 1024
# change this number for different sizes
if [[ `du "${FILE_PATH}" | cut -f1` -gt 51200 ]]; then
echo '----- TOO BIG FILE -----'
exit 0
fi
}
Во-вторых, вызовите эту функцию где-нибудь в scope.sh
.
Например, приведенный ниже код предотвратит предварительный просмотр любых файлов размером более 50 МБ (— это последние несколько строк изscope.sh
):
...
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
### start of new block ###
drop_bigsize
### end of new block ###
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
handle_image "${MIMETYPE}"
fi
handle_extension
handle_mime "${MIMETYPE}"
handle_fallback
exit 1
Чтобы делать такие вещи с некоторыми определенными типами файлов, например. для некоторых архивов вам потребуется поместить один и тот же блок кода в другую часть вашегоscope.sh
:
...
handle_extension() {
case "${FILE_EXTENSION_LOWER}" in
# Archive
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
### start of new block ###
drop_bigsize
### end of new block ###
atool --list -- "${FILE_PATH}" && exit 5
bsdtar --list --file "${FILE_PATH}" && exit 5
exit 1;;
rar)
# Avoid password prompt by providing empty password
unrar lt -p- -- "${FILE_PATH}" && exit 5
exit 1;;
...
Функция strptime()
используется для синтаксического анализа форматированного времени (обратного действия strftime()
). Вы хотите strftime()
.
Использованиеjq
:
jq -n 'now as $t | { date: [ ($t|strftime("%H")), ($t|strftime("%M")), ($t|strftime("%S")) ] }'
Здесь используется strftime()
для форматирования времени, заданного функцией now
. Используйте strflocaltime()
для преобразования времени в местное время.
Если это слишком многословно или кажется неэффективным (, мы на самом деле вызываем strftime()
один раз для каждого элемента массива date
! ), затем рассмотрите возможность создания HH:MM:SS
метки времени строки , а затем разделения ее на двоеточия:
jq -n '{ date: (now | strftime("%H:%M:%S") | split(":")) }'
Любая из приведенных выше команд может привести к
{
"date": [
"07",
"01",
"23"
]
}
Полный скрипт (использует jo
для безопасного создания начального массива vtg
из значений именованного bash
массива):
#!/bin/bash
value=(11.769 11.769 11.339 11.788 11.867 11.886 11.808 11.339 11.554 11.182)
jo vtg="$( jo -a "${value[@]}" )" |
jq '. += now as $t | { date: [ ($t|strftime("%H")), ($t|strftime("%M")), ($t|strftime("%S")) ] }'
# or...
jo vtg="$( jo -a "${value[@]}" )" |
jq '. += { date: (now | strftime("%H:%M:%S") | split(":")) }'
Очевидно, что вы также можете создать раздел данных «на лету» с jo
чтением из команды date
:
jo vtg="$( jo -a "${value[@]}" )" \
date="$( jo -a $( date +'%H %M %S' ) )"
Это зависит от того, что оболочка разделяет вывод date
на пробелы в строке формата. Вы получите местное время из приведенного выше.
Инструмент jo
доступен в https://jpmens.net/2016/03/05/a-shell-command-to-create-json-jo/