The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Раздел полезных советов: Скрипт для конвертации архива gz в lzma, auto_tips (ok), 27-Фев-22, (0) [смотреть все] +2

Сообщения [Сортировка по времени | RSS]


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

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

>> echo
> printf

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

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

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

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

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

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

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

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

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

в dash этого нет.

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

> linux only

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

17. "Скрипт для конвертации архива gz в lzma"  +/
Сообщение от pavlinux (ok), 26-Мрт-22, 11:59 
Например, выведи мне строку "-n".
echo -e  '\b-n'
Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

23. "Скрипт для конвертации архива gz в lzma"  +1 +/
Сообщение от pavlinux (ok), 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/

Ответить | Правка | Наверх | Cообщить модератору

24. "Скрипт для конвертации архива 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. Не та цель.

Ответить | Правка | Наверх | Cообщить модератору

47. "Скрипт для конвертации архива gz в lzma"  +/
Сообщение от echomaster (?), 07-Май-22, 20:58 
echo - -n
Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

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

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

echo -n '-n'


Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

6. "Скрипт для конвертации архива gz в lzma"  +4 +/
Сообщение от Аноним (6), 02-Мрт-22, 20:03 
> хочу перепаковать .. в lzma

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

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

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

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

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


Ответить | Правка | Наверх | Cообщить модератору

12. "Скрипт для конвертации архива gz в lzma"  –1 +/
Сообщение от 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


Ответить | Правка | Наверх | Cообщить модератору

57. "Скрипт для конвертации архива gz в lzma"  +/
Сообщение от OpenEcho (?), 25-Фев-23, 23:17 
А зачем вот это все?

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

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

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

Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

14. "Скрипт для конвертации архива gz в lzma"  +/
Сообщение от Аноним (14), 22-Мрт-22, 15:59 
Но зачем в устаревший lzma, а не в xz?
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

53. "Скрипт для конвертации архива gz в lzma"  +/
Сообщение от Werwolf (ok), 04-Окт-22, 12:24 
zstd пробовали?
Ответить | Правка | Наверх | Cообщить модератору

59. "Скрипт для конвертации архива gz в lzma"  +/
Сообщение от OpenEcho (?), 25-Фев-23, 23:27 
> zstd пробовали?

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

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру