URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 126891
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"

Отправлено auto_tips , 27-Фев-22 18:44 
Скрипт для преобразования архива .gz в .lzma с сохранением времени изменения/создания файла и прав доступа, а также с минимальным влиянием на производительность.
Для переименования группы файлов можно использовать конструкцию вида:

   find . -name "*.gz" -print0 | xargs -0 -n 1 echo ~/bin/gz2lzma.sh | batch

gz2lzma.sh:

#!/bin/sh
#
# CopyLeft (L) john_erohin, 2022
#
# gz2lzma.sh: convert .gz to .lzma with same mtime, ctime and access rights
#
# in: $1 = file name with or without ".gz" suffix
# out: file "$1.lzma" and removed "$1.gz" if conversion is ok
#
# warining: if $1.lzma exist, it will be silently overwritten
#
# use someth like
# find . -name "*.gz" -print0 | xargs -0 -n 1 echo ~/bin/gz2lzma.sh | batch
# for mass background conversion
#
F=$1
F=`echo $F | sed -e s:\.gz\$::g`

if [ -f $F.gz ] ; then
/usr/bin/eatmydata -- \
  /usr/bin/nice -19 \
   /usr/bin/chrt --idle 0 \
    /usr/bin/ionice -c 3 \
      gzip -t $F.gz > /dev/null 2>&1
  RC=$?
  if [ $RC -ge 1 ]; then
    echo error $RC in $F.gz : integrity test failed
    exit $RC
  fi
  CTIME=`stat -c %w $F.gz`
  MTIME=`stat -c %y $F.gz`
  CHMOD=`stat -c %a $F.gz`
  TF=`mktemp`
  T=`basename $TF`
  rm $TF
  L=$F.$T.lzma
  touch $L
  chmod $CHMOD $L
  gzip -cdk $F.gz | \
    /usr/bin/eatmydata -- \
     /usr/bin/nice -19 \
      /usr/bin/chrt --idle 0 \
       /usr/bin/ionice -c 3 \
         /usr/bin/lzma -z9c > $L
  RC=$?
  if [ $RC -eq 0 ]; then
    touch --date="$CTIME" $L
    touch -m --date="$MTIME" $L
    mv $L $F.lzma
    rm $F.gz
  else
    echo lzma run-time error $RC processing $L
    exit $RC
  fi
else
  echo error: no input file $F or $F.gz
  exit 1
fi


URL:
Обсуждается: http://www.opennet.me/tips/info/3202.shtml


Содержание

Сообщения в этом обсуждении
"Скрипт для конвертации архива gz в lzma"
Отправлено ABATAPA , 27-Фев-22 18:44 
Привер того, как нельзя делать: переменные без кавычек, вызов внешних программ с  простой передачей им "голых" переменных (которые подставляются в exec), двойное раскодирование (сперва "тест", потом основное) вместо обработки кодов возврата...
Корявый скрипт новичка.

"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 28-Фев-22 20:45 
соглашусь с предыдущим оратором. Автор, вбей свой скрипт в shellcheck.

> Скрипт для конвертации архива gz в lzma

что за задачка такая странная? Зачем это вообще нужно?

> echo

printf

> if условие; then
>   практически весь скрипт
> else
>   какой-то однострочный пустяк
> fi

просто проверь в самом начале на плохое условие и сделай ранний выход. Зачем весь скрипт помещать внутрь гигантского ифа?

> /usr/bin

не понимать, зачем универсальному кросс-дистровому скрипту хардкодить пути к бинарям. А если я захочу переопределить $PATH?

> CopyLeft (L)

Что за лицензия такая?

> echo error: no input file $F or $F.gz
> exit 1

почему ошибки идут в stdout, а не в stderr?

где стандартная преамбула, врубающая строгий режим? типа

    set -euo pipefail
    shopt -s inherit_errexit

почему у переменных однобуквенные названия? да ты и сам спустя месяц забудешь, что они значат

> if [ -f $F.gz ]

че за бред, это не единственная IO-ошибка, которая может возникнуть. Об этих ошибках должна рапортовать вызываемая прога, а твое дело -- просто вовремя выходить и не глушить ее stdout/err.


"Скрипт для конвертации архива gz в lzma"
Отправлено Омомо , 03-Мрт-22 22:25 
> set -euo pipefail
> shopt -s inherit_errexit

там в шебанге -- `/bin/sh`, нет никакого pipefail.
какой такой шопт? его тоже нет.


"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 04-Мрт-22 07:46 
> там в шебанге -- `/bin/sh`, нет никакого pipefail.

однако "set -e" есть.

> какой такой шопт? его тоже нет.

есть такие потребители смузей, что линкуют жырный bash на /bin/sh


"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 29-Мрт-22 02:30 
Не знаю, как в gentoo, но в calculate по дефолту. А может и в gentoo тоже.

"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 19-Апр-22 22:08 
> есть такие потребители смузей, что линкуют жырный bash на /bin/sh

А ещё у bash конвейеры передают быстрее, чем (внезапно) тот же dash, сам мерял.


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 03-Апр-22 05:56 
Пытаться сделать что-то с POSIX-шеллом сложнее hello world — бесполезная трата времени.

Писать на баше это разумный и оптимальный подход, за исключением 3½ вырожденных случаев, которые ты за свою жизнь в дикой природе не встретишь, а если встретишь, то и там тоже будет баш.


"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 06-Апр-22 05:50 
> Пытаться сделать что-то с POSIX-шеллом сложнее hello world — бесполезная трата времени.

на чистом /bin/sh - да, возможно.
но зачем, если есть grep, sed и awk.


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 07-Апр-22 03:31 
Если что-то трудно изобразить на чистом шелле, то на баше получится урод еще покруче. Как раз 3.5 случая, когда башизмы хорошо ложатся. Лично мне проще писать на примитивном и простом как палка шелле, чем зазубривать все особенности баша.

"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 19:24 
> чем зазубривать все особенности баша.

которые к тому же могут быть не совместимыми между версиями


"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 19:28 
> Пытаться сделать что-то с POSIX-шеллом сложнее hello world — бесполезная трата времени.

Так и запишем, - "не одолел" :)

На чистом шеле + стандартных утилитах типа sed, awk, tr, jq... можно написать большинство админовских задач ^значительно быстрее^ чем использование более высокоуровневых языков



"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 28-Фев-22 21:43 
> что за задачка такая странная? Зачем это вообще нужно?

я хочу перепаковать. накопилось всякого в tar.gz, CPU и память есть.
в дальнейшем переведу упаковку логов в lzma.

>> echo
> printf

отказать. снижает читаемость.

> Зачем весь скрипт помещать внутрь гигантского ифа?

"структурное програмирование". слыхали про такую парадигму ?

> зачем универсальному кросс-дистровому скрипту

linux only. существенно используется

https://www.opennet.me/tips/3187_idle_cpulimit_limit_process...

> почему ошибки идут в stdout, а не в stderr?

справделиво. я исправлю это.

> где стандартная преамбула, врубающая строгий режим?

в dash этого нет.

и наконец:
> > CopyLeft (L)
> Что за лицензия такая?

как копирайт, только наоборот. google it.


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 01-Мрт-22 07:55 
> отказать. снижает читаемость

echo не надежен, т. к. не дает универсального интерфейса для вывода самых разных строк. Например, выведи мне строку "-n". Вот попробуй сам: echo -n

> "структурное програмирование". слыхали про такую парадигму ?

если весь код оформлять чисто структурно, то он быстро перейдет в трудноподдерживаемое состояние. Вместо этого следует использовать контрактное программирование, при котором все предусловия проверяются еще до начала работы. (Забудем на минуту, что конкретно в этом скрипте предусловия проверять вообще не надо -- пусть падает вызываемая прога.)

> linux only

че за рандомная ссылка? как она отвечает на мой вопрос?

> в dash этого нет.

Ну а в каких шеллах ты вообще проверял свой скрипт, раз хочешь "кросс-шелловость"? bash? csh? zsh? ash? fish?

> как копирайт, только наоборот. google it.

нет такой лицензии "копирайт". Нет такой лицензии "копилефт". google it: https://choosealicense.com/


"Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 26-Мрт-22 11:59 
Например, выведи мне строку "-n".
echo -e  '\b-n'

"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 29-Мрт-22 02:38 
> Например, выведи мне строку "-n".
> echo -e  '\b-n'

А если переносимо, чтоб и на bash и на dash?
Например, dash выдаст: -e-n

В стандарте на posix shell вообще нет echo.

printf '%s' "строка"  # Вполне читаемо


"Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 29-Мрт-22 12:24 
>> Например, выведи мне строку "-n".
>> echo -e  '\b-n'
> А если переносимо, чтоб и на bash и на dash?

[ $SHELL == "dash" ] then
[ $SHELL == "bash" ] then
[ $SHELL == "mash" ] then
[ $SHELL == "sash" ] then

> Например, dash выдаст: -e-n

On XSI-conformant systems, if the first operand is -n, it shall be treated as a string,
not an option. The following character sequences shall be recognized on XSI-conformant
systems within any of the arguments:

Так что, это ты пишешь не по стандарту, а не echo плохое.  :D

> В стандарте на posix shell вообще нет echo.

The Open Group Base Specifications Issue 7, 2018 edition
IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008)
Copyright © 2001-2018 IEEE and The Open Group

https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/


"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 31-Мрт-22 22:50 
>>> Например, выведи мне строку "-n".
>>> echo -e  '\b-n'
>> А если переносимо, чтоб и на bash и на dash?
> [ $SHELL == "dash" ] then
> [ $SHELL == "bash" ] then
> [ $SHELL == "mash" ] then
> [ $SHELL == "sash" ] then

Кажется, вы предлагали echo для компактности. Все, гуляй компактность.

>> Например, dash выдаст: -e-n
> On XSI-conformant systems, if the first operand is -n, it shall be
> treated as a string,
> not an option. The following character sequences shall be recognized on XSI-conformant
> systems within any of the arguments:

Прямо перед этим:
> If the first operand is -n, or if any of the operands contain a <backslash> character, the results are implementation-defined.

===============
> Так что, это ты пишешь не по стандарту, а не echo плохое.
>  :D

printf един, а у echo

>APPLICATION USAGE
> It is not possible to use echo portably across all POSIX systems unless both -n (as the first argument) and escape sequences are omitted.
> The printf utility can be used portably to emulate any of the traditional behaviors of the echo utility as follows (assuming that IFS has its standard value or is unset):

================
>> В стандарте на posix shell вообще нет echo.
> The Open Group Base Specifications Issue 7, 2018 edition
> IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008)
> Copyright © 2001-2018 IEEE and The Open Group
> https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/

Ну тогда уж сюда, а то еще раздел "Command language" искать.
https://pubs.opengroup.org/onlinepubs/9699919799.2018edition...

И то - сам стандарт прямо говорит, что переносимость у echo так себе. Вот делать нечего, как зачитывать все эти имена вместо одной строчки printf. Не та цель.


"Скрипт для конвертации архива gz в lzma"
Отправлено echomaster , 07-Май-22 20:58 
echo - -n

"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 19:35 
> разных строк. Например, выведи мне строку "-n". Вот попробуй сам: echo -n

Я что то не понял, а в чем проблема?

echo -n '-n'



"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 02-Мрт-22 20:03 
> хочу перепаковать .. в lzma

zcat in.tar.gz | lzma > out.tar.xz

Использования неименованного канала командной оболочки предотвращает передачу метаданных сжатого файла tar-архива. Но метаданные файлов внутри tar-архива хранятся в самом tar-архиве и сохраняются, он вообще не распаковывается.

Так как и gzip, и xz (lzma) умеют сжимать только один файл, имеет смысл использовать их только в связке с tar, который обеспечит сохранность метаданных.


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 02-Мрт-22 20:04 
zcat in.tar.gz | lzma > out.tar.lzma



"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 04-Мрт-22 07:55 
> zcat in.tar.gz | lzma > out.tar.lzma

не все так хорошо.
от использования cpulimit в tar.gz появился концевой мусор,
поэтому придеься усложнить проверку:


GZT=`mktemp`

/usr/bin/eatmydata -- \
  /usr/bin/nice -19 \
   /usr/bin/chrt --idle 0 \
    /usr/bin/ionice -c 3 \
      gzip -vt $F.gz > $GZT 2>&1
  RC=$?
  if [ $RC -ge 1 ]; then
    grep -q "decompression OK, trailing garbage ignored" $GZT
    if [ $? -eq 0 ]; then
      RC=0
    else
      echo error $RC in $F.gz : integrity test failed
      rm $GZT
      exit $RC
    fi
  fi



"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 23:17 
А зачем вот это все?

>  /usr/bin/eatmydata -- \
>   /usr/bin/nice -19 \
>    /usr/bin/chrt --idle 0 \
>     /usr/bin/ionice -c 3 \


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 02-Мрт-22 20:09 
А скрипт просто ужасен. Переменные без кавычек после rm и mv - верный путь удалить себе ноги или переместить их вместо рук.

Надо так:
mv -v -- "$F"
rm -v -- "$F"


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 07-Апр-22 03:19 
Переменная проверяется до mv и rm, смысла нет засирать кавычками и флажками. Если что-то такое с пробелами в $F подсунуть, иф упадет.
У вас просто догма - нужно все обкавычивать, как бы чего не вышло.

"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 13-Апр-22 12:23 
Из каких конструкций можно понять, что переменная действительно проверяется до mv и rm? Неочевидно и неизвестно никому через два месяца.

Без кавычек при вносе изменений придётся каждый раз, каждый раз, перечитывать всё, убеждаясь и разыскивая, что переменная проверяется до mv и rm. Это трата времени и внимания.

Подход с кавычками не требует анализировать весь скрипт каждый раз.
(Но, этот шелл такой шелл, что чтобы окавычивать и не перечитывать всё каждый раз с нуля, нужно окавычивать вообще всё всегда или сохраняется необходимость перечитки кода при вносе изменения. Такая магия развёртки переменных в кавычках и без, более-менее однозначность только если вообще всегда в кавычках. А иначе - тоже вчитываться надо опытному магу.)

Потому кавычки упрощают в долгосрочной перспективе.

P.S. В Шелле нет хорошего способа программировать. Инструмент для другого. Инструмент админа для интеграции/связи утилит, написанных на богатых инструментами и средствами программирования языках.


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 28-Апр-22 15:26 
> Переменная проверяется до mv и rm, смысла нет засирать кавычками и флажками.

Дешёвые понты. "Засирать" - это как раз про такой говнокод, в котором нужно постоянно разбираться, что за чем проверялось. А двойные кавычки и EoO спасут ещё не один системный корень.


"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 23:22 
> У вас просто догма - нужно все обкавычивать, как бы чего не вышло.

Значит вы еще не наступали на грабли, иначе бы знали почему шелчек ругается на безковычковые переменные


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 22-Мрт-22 15:59 
Но зачем в устаревший lzma, а не в xz?

"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 26-Мрт-22 13:20 
> Но зачем в устаревший lzma, а не в xz?

по результатам тестов. у lzma лучше результаты на этой коллекции.


"Скрипт для конвертации архива gz в lzma"
Отправлено Werwolf , 04-Окт-22 12:24 
zstd пробовали?

"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 23:27 
> zstd пробовали?

Хорош, но очень уж голоден до памяти, S2 не хуже, быстрей и жрет памяти меньше


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 02-Мрт-22 12:07 
Мы всегда когда-то только учились.

"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено Омомо , 03-Мрт-22 22:31 
"не нужно! этот ваш шелл нечитаемый. пишите на нормальных языках!"

(я не знаю стандартные утилиты, не понимаю, зачем был сделан шелл, не знаю, что такое stdio и статус завершения процесса, пишу на питоне)


"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 31-Мрт-22 23:34 
Выглядит как сарказм, зачем это минусовать.

"Скрипт для конвертации архива gz в lzma"
Отправлено i , 09-Мрт-22 01:29 
Одно дело написать скриптец, чтобы он за вечерок перелопатил что-то, или за выходные, и совсем другое делать готовое решение, решение которое должно кроме защиты от инжектов включать защиты от двойного запуска, уметь определять когда оно было прервано, чтобы продолжать с нужного места, на баше это конечно делается, но настолько муторно, что проще переписать на чем-то вменяемом.

"Скрипт для конвертации архива gz в lzma"
Отправлено Pavel , 23-Мрт-22 16:04 
А чего тут муторного?

PIDFILE="/run/myscript.pid"

if [ -f "${PIDFILE}" ]; then
    pkill -0 -F "${PIDFILE}" \
    && echo "Script already run" \
    && exit 0 \
    || echo "Starting new instance"
fi
echo $$ > "${PIDFILE}"


"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 31-Мрт-22 23:37 
> А чего тут муторного?
> PIDFILE="/run/myscript.pid"
> if [ -f "${PIDFILE}" ]; then
>     pkill -0 -F "${PIDFILE}" \
>     && echo "Script already run" \
>     && exit 0 \
>     || echo "Starting new instance"
> fi
> echo $$ > "${PIDFILE}"

Если на полную катушку, то у шеллов (не только bash) должны быть стандартные пути для скриптов-библиотек, включая сами библиотеки. Вот это была бы моща.


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 13-Апр-22 12:40 
Так это делают: source /папка/файл

Только тогда необходимость учитывать в каждый момент времени много скушных неочевидных обстоятельств. Которые в продвинутых языках не допускают для уменьшения числа ошибок.

Знания, что у каких-то топовых шелл 'set +e' будет принудительно сделан по POSIX при уровне вложенности более x (x=2, если верно помню), хоть бы и напишешь 'set -e'. И т.д. про '-o pipefail'. Что надёжные коды возврата из функций только строго беззнаковый байт.

Что если при 'set -x' есть $0 и $LINENO внутри PS4, то в случае source сработает неудобно.

Пространства имён переменных. Вот это всё про local, export... Проблемность глобальности переменных.

Кодить можно, но есть другие более предназначенные для того инструменты.


"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 17-Апр-22 16:16 
> Знания, что у каких-то топовых шелл 'set +e' будет принудительно сделан по POSIX при уровне вложенности более x (x=2, если верно помню), хоть бы и напишешь 'set -e'

А это точно есть в posix?
posix-мануал для set про это ни слова (про опцию -e), да и слов force / nest там не найдено.

По моему, если про это не сказано в стандарте, значит это против него).


"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 17-Апр-22 16:32 
'-o pipefail' тоже не по posix

"Скрипт для конвертации архива gz в lzma"
Отправлено ммнюмнюмус , 31-Мрт-22 23:51 
# То же самое, но чуть более читаемо

PIDFILE="/run/myscript.pid"

if [ -f "${PIDFILE}" ] && pkill -0 -F "${PIDFILE}"; then
    echo "Script already run"
    exit 0
fi
echo "Starting new instance"
echo $$ > "${PIDFILE}"


"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 07-Апр-22 03:06 
> А чего тут муторного?
> PIDFILE="/run/myscript.pid"
> if [ -f "${PIDFILE}" ]; then
>     pkill -0 -F "${PIDFILE}" \
>     && echo "Script already run" \
>     && exit 0 \
>     || echo "Starting new instance"
> fi
> echo $$ > "${PIDFILE}"

Вроде бы есть утилитка, которая нечто подобное реализует.


"Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 26-Мрт-22 11:45 
LZMA было модно лет 15 назад, ща ZSTD в тренде.  https://github.com/facebook/zstd

"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 23:34 
> LZMA было модно лет 15 назад, ща ZSTD в тренде.  https://github.com/facebook/zstd

S2 ИМХО значительно, лучше


"Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 26-Мрт-22 18:30 
> /usr/bin/nice -19 \
> /usr/bin/chrt --idle 0 \
> /usr/bin/ionice -c 3 \

Дедовские методы и особо без гарантий.

# mount -t cgroup -o all cgroup /sys/fs/cgroup;
# mkdir /sys/fs/cgroup/$$
# cd /sys/fs/cgroup/$$
...
и понеслось рулить лимитами
...


"Скрипт для конвертации архива gz в lzma"
Отправлено AntiSmoozer , 11-Апр-22 00:13 
Смузи выпил?

"Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 13-Апр-22 12:43 
Так ведь у автора зато без sudo.

"Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 25-Апр-22 11:30 
> Так ведь у автора зато без sudo.

Афтор - чайник, у него "/usr/bin/nice -19",
он наверное не в курсе, что МИНУС 19 - это макс. приоритет в планировщике.  :D


Не, ну мож наоборот, он гений. И вычислил, что комбинация: "nice -19, chrt --idle 0, ionice -c 3"
даёт минимальный оверхэд. Типа в планировщике по-быстренькому отдуплился и дальше ждать ушёл.


Но у меня такое ощщущенние, что это больше на DoS похоже.
В планировщике задач будет часто появляться, при этом у таймера будет приоритет IDLE 0,
но планировщик его не вытолкнет, будет ждать окончания ionice 3;

  


"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 12-Май-22 21:55 
> Афтор - чайник, у него "/usr/bin/nice -19",
> он наверное не в курсе, что МИНУС 19 - это макс. приоритет
> в планировщике.  :D

тонко !
я даже начал сомневаться в себе. но потом проверил.

0) есть builtin nice в разных шеллах, несовместимое внутри себя. а есть вот чего:

$ file /usr/bin/nice

/usr/bin/nice: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2d64570259ee4ea90022ff7c87afbce7b6366f17, for GNU/Linux 3.2.0, stripped

я по очевидным причинам использую именно это.

1) man top
/NI
13. NI  --  Nice Value
The  nice  value  of  the  task.   A  negative  nice value means higher priority, whereas a
positive nice value means lower priority.  Zero in this field simply  means  priority  will
not be adjusted in determining a task's dispatch-ability.

2) и вот представьте себе, процессы запущенные через "/usr/bin/nice -19"
по данным top имеют NI = 19 (плюс 19),
а треды ядра типа rcu* и mm* имеют NI = -20 (минус двадцать).

что бы это значило ?


"Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 21-Май-22 17:07 
Косяк это шелов и окружений (env), если nice -19 exec у тебя показывает наименьший,  
то nice 19 exec не сможешь указать. Чтоб работало везде пиши: nice -n 19 или nice -n -19;

> а треды ядра типа rcu* и mm* имеют NI = -20 (минус двадцать).
> что бы это значило ?

Это значит у них максимальный приоритет!!!


"Скрипт для конвертации архива gz в lzma"
Отправлено john_erohin , 10-Июн-22 22:17 
> Чтоб работало везде пиши: nice -n 19 или nice -n -19;

отказать. чтобы работало везде надо вызывать /usr/bin/nice именно так как написано.


"Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 23:37 
> Но у меня такое ощщущенние, что это больше на DoS похоже.

Угу, у меня такое-же мнение


"Скрипт для конвертации архива gz в lzma"
Отправлено Ano , 18-Апр-22 17:04 
Скрипт прочтения man gz lzma bash

"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 25-Апр-22 12:23 

#!/bin/bash
#
# перед стартом проверить наличие find, file, rename, stat, chmod, chown, touch, zcat, lzma, ...

for d in $(find -noleaf -xdev -type d)
   do
      pushd .;
      cd $d
      for i in $(ls -1 *[gG][zZ]); # .tgz, .GZ тоже бывают.
         do
           if [ "$(file --mime-type $i|cut -d' ' -f2)" != "application/gzip" ];
              then
                   continue;
           fi
           # тут должно быть определение прав доступа на (запись, chmod/chown оригинала)
           zcat $i | lzma -cz9 > $i.lzma;
           touch -a -d "`stat -c '%x' $i`" $i.lzma;
           touch -m -d "`stat -c '%y' $i`" $i.lzma;
           chown "`stat --printf '%u:%g' $i`" $i.lzma;
           chmod "`stat -c '%a' $i`" $i.lzma;
           rename 's/gz.lzma/lzma/' $i.lzma
           rm $i;
       done;
      popd;
done



"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено Аноним , 28-Апр-22 15:18 
> if [ "$(file --mime-type $i|cut -d' ' -f2)" != "application/gzip" ]; then continue; fi

case "$(env LC_ALL=C file --mime-type --brief -- "${i}")" in application/gzip) continue ;; esac


"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено другой Аноним , 25-Июн-22 14:02 
[~/src]:$ file --ver
file-5.33
magic file from /etc/magic:/usr/share/misc/magic

[~/src]:$ file --mime-type gpu_burn-0.4.tar.gz
gpu_burn-0.4.tar.gz: application/x-gzip

--

надо бы ещё проверять, а все ли утилиты файл возвращают application/gzip или кто-то application/x-gzip?


"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено pavlinux , 20-Июл-22 19:12 
> надо бы ещё проверять, а все ли

Я тож считают, что за время гемора в разработке этого скрипта,
можно было заработать на покупку 100Tb SSD. Это к вопросу об экономии места.  

Портабельность тут почти на нуле. Напр. на SCO UNIX иль IRIX 7 не взлетит.
Не полетит на busybox-based дистрах, в Андроидах, скорее всего с BSD до 9 будут проблемы...


Для универсальности надо либо писать на ANSI C89/C++98/Perl 2.0/Python2,  
либо тестить скрипты в csh на FreeBSD/NetBSD версий 1997-2000 годов.



"Раздел полезных советов: Скрипт для конвертации архива gz в lzma"
Отправлено OpenEcho , 25-Фев-23 23:40 
> for i in $(ls -1 *[gG][zZ]);

С этим можно хорошенько нарваться если в директории будет очень много файлов, т.к. можно легко нарваться на лимит CLI