LINUX.ORG.RU
решено ФорумTalks

Программисты на Си типичные говнокодеры (пруф).

 , , ,


0

1

пруф -> https://git.savannah.gnu.org/cgit/tar.git/tree/src/list.c#n1280

как правильно распарсить выхлоп tar -tvf file.tar если там есть всякие имена с -> или link to? ответ никак, нужно использовать опцию --quoting-style=

как разделить

"'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal." link to "'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal.Original.txt"

поделить строку на две по link to так? нет. нужно найти первую часть от начала и до не закоменченных " (без \ перед ")

так вот вместо того, чтобы добавить в tar вывод каждого файла/заголовка в архиве в терминал как блоки разделенные условным --- привер:

---
number: 1
permissions: drwxrwxrwx
user: userName
group: groupName
size: 184139
date: 2021-11-21
time: 14:50
file: 'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal.
pointTo:  'Test D\"   b \"Portable -> 2.11.0'/\" link to . -> _phyiscal.Original.txt
---
etc

вместо этого tar реально подразумевает парсинг вышеописанного.

Перемещено xaizek из development

★★★★★

Последнее исправление: bhfq (всего исправлений: 1)

так вот вместо того, чтобы добавить в tar вывод каждого файла/заголовка в архиве в терминал как блоки разделенные условным — привер:

Не совсем понял и вник. Но разве тогда не будет проблем с файлами содержащими ---- в названии? Просто от экранирования никак не уйти. Это обычное дело.

anonymous
()
Ответ на: комментарий от bhfq

при том что tar написан на си

Бывает и так, что ядро проекта написано на Си, а пользвоательский интерфейс на чём-нибудь другом. Это просто посоный UX/UI. В реальности довольно сложная тема. И хорошо реализованна разве что у git (и то, стараниями японца, а не разработчиков его ядра).

anonymous
()

Если нет альтернативы от других программистов, то сишники - монополисты, и делают что захотят не говнокодеры

anonymous
()

АВЭКА осваивай. AWK.

anonymous
()
Ответ на: комментарий от NAY_GIGGER

подозреваю что на расте либо писали режим совместимости с Си tar, либо делали как в 7z табличный вывод, либо предоставили пользователям вообще вывод в json.

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от anonymous

Сначала они в цитатах ошибаются, потом в коде.

ashot ★★★★
()

вместо этого tar реально подразумевает парсинг вышеописанного.

а разве не то, что с ним работает пользователь? Погромист берет что-то типа libtar и не занимается парсингом вывода.

anonymous
()

вместо этого tar реально подразумевает парсинг вышеописанного.

Вывод tar — для людей, а не для других программ. Если ты серьёзно пытаешься парсить его вывод вместо того, чтобы взять какой-нибудь libtar или даже libtar.a из самого GNU tar, то говнокодер — ты.

Даже в ситуации, когда позарез нужно использовать код GNU tar, но при этом нельзя линковаться с GPL кодом, я бы пропатчил tar, добавив вывод либо в JSON, если не ожидается не-UTF-8 имён, либо в CSV с особым разделителем вроде \0, либо в BSON.

i-rinat ★★★★★
()

Нехрен парсить вывод для пользователя и обвинять в этом разработчиков. Им можно предьявить только отсутствие вывода в машинном формате.

xaizek ★★★★★
()
Ответ на: комментарий от wandrien

выхлоп tar архива с 348501 файлом парсится за 450-550 мс, глубоко не заморачиваясь с оптимизацией.

этот же самый архив в file-roller открывается за 3 секунды, тоже используя парсинг tar и 140 мб озу.

ark из kde открывает секунд за 20 секунд используя libarchive и 420 мб озу

так что нет.

bhfq ★★★★★
() автор топика

какое противоречивое высказывание то

ответ никак, нужно использовать опцию --quoting-style=

xmikex ★★★★
()
Ответ на: комментарий от bhfq

а если сделать без tar просто монтирование архива и уже потом использовать ls с нужными опциями в смонтированном содержимом? вообще основное назначение у tar же не вывод содержимого без распаковки.

xmikex ★★★★
()
Ответ на: комментарий от i-rinat

используя libtar, я должен буду реализовать все функции типичного архиватора: list, create, add, remove, extract, delete сам с вероятностью 99% там будут ошибки, правильный линуксовый путь — это использовать cli, но авторы cli https://git.savannah.gnu.org/cgit/tar.git/log/src/list.c?ofs=100 за 27 лет не смогли сделать очевидного.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от bhfq

за 27 лет не смогли сделать очевидного.

Ладно, убедил.

Зашли им патч с выхлопом в JSON или еще чем-нибудь машиночитаемым. Родина тебе скажет спасибо.

wandrien ★★
()

безотносительно подхода авторов к выводу списка.

поделить строку на две по link to так? нет.

а в чем проблема захватить кавычки и поделить по " link to "?

xgatron
()
Ответ на: комментарий от intelfx

нет --quoting-style=c поставит " в конце делителя link to (в начале продолжения st->link_name.

bhfq ★★★★★
() автор топика
Последнее исправление: bhfq (всего исправлений: 2)
Ответ на: комментарий от bhfq

Но похоже, что код с парсингом вывода tar не используется. Я сейчас сделал шальной архив с хитрыми именами ссылок. File-roller его нормально распаковал. Похоже, он использует libarchive вместо попыток запускать и парсить вывод tar.

Тем не менее, кривой код там есть. Благо, что не используется.

i-rinat ★★★★★
()
Ответ на: комментарий от wandrien

Шутки-шутками, а было бы неплохо, если бы гнутые утилиты могли отдавать вывод в каком-нибудь машинноразбираемом формате в дополнение.

apt_install_lrzsz ★★★
()

Парсишь на баше через жопу ты, а виноват выхлоп tar? Кто кто говнокодер тут так это ты. Если бы хотел парсить что написал бы на том же си утилитку которая через трубу считала строку и фильтровала там по нормальному «"->» в виде тупо sscanf в виде форматированной строки и всё. Ты пытаешься распарсить выхлоп для человеков так будто это выхлоп для машин.

Да, я понимаю тебя что хотелось бы легко парсить. А давай ещё выхлоп ошибок gcc/clang парсить, там ваще весело когда одна логиченская сущность в виде нескольких строк.

В общем тебя просто бамбануло бамбалейло, бывает. Но tar и си тут вообще не причём.

А вообще все люди говнокдеры без исключения когда результат их работы соответствует нашим ожиданиям =)

И под конец, есть же libtar или типа того. Было бы хорошо если был у всех утилит вариант унифицированного вывода, но такого нету. Так что вот так вот и живём

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от apt_install_lrzsz

Всем брать пример с exiftool, которая отдает JSON)

wandrien ★★
()
Ответ на: комментарий от LINUX-ORG-RU

Если бы хотел парсить что написал бы на том же си утилитку которая через трубу считала строку и фильтровала там по нормальному «"->» в виде тупо sscanf в виде форматированной строки и всё.

Ну типичного сишника видно сразу, создать костыль для костыля, а затем пропихнуть его во все дистрибутивы линукса еще предложи чтобы другие пользовались!

bhfq ★★★★★
() автор топика
Ответ на: комментарий от bhfq

Ну так говорят же тебе: используй libtar для своих целей. А если лень, то найми какого-нибудь Джаеша за пару пиал похлёбки.

Ещё один не смог вскопать нормально землю отвёрткой и пришел негодовать про говнотокарей на форум.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от bhfq

Ну типичного сишника видно сразу, создать костыль для костыля

Так ты это и делал только на баше через экранирования и прочее. Выхлоп для людей для тебя костыль? Костыль это то что ты делал и то что я предложил. Для всего остального есть программные интерфейсы libtar или тип того. А так можно ls в json выводить чёб нет то =)

Я конечно в начале слишком грубый был пардон. Но в целом то.Да, повторюсь хочется всей душенькой парсить то что удобно видеть глазам и часто там для парсинга приколы и прочее. Ну так это же разовая херня можно и пострадать и поговнокодить как угодно, но если уж прям горит и дебе нужно надёжно то надо дёргать либы по нормальному. Я сам парсю всякого гааавно своим говонокодом так же и меня это тоже часто бесит. Но это моя проблема, а не программ вывода и языка. =)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Что ты хочешь от говна мамонта, разрабатываемого по мотивам окаменелого молюска? Понято же, что авторы не собирались специально делать хорошо какому-то bhfq, который будет использовать их прогу через *дцать лет в будущем.

seiken ★★★★★
()

tar – это вообще пример консольной программы, как делать не нужно. Ужасный UI.

Im_not_a_robot ★★★★★
()

Да-да, давно пора для коммуникации в шелле использовать JSON.

anonymous-angler ★☆
()
Ответ на: комментарий от bhfq

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

Juan-Carlos
()

Может тут проблема несколько глубже? Файлы же могут содержать в именах что угодно кроме, кроме ., .. и \0 и ограничений, накладываемых ФС, разве нет? И тогда твой вариант моментально рассыпится как карточный домик, когда налетит на очередное исключение вида "hello\n---\n.txt".

anonymous-angler ★☆
()

Удивительно что человек называющий файлы в стиле «Portable -> 2.11.0!!» всё ещё не бит ближайшими коллегами :-)

MKuznetsov ★★★★★
()

Это проблемы алгоритмов конкретных людей, а не отрасли в целом.

xwicked ★★☆
()
Ответ на: комментарий от MKuznetsov

взят был первый ближайший архив программы на lua, до конца не запикал название. каталоги и файлы специально названы с спец. символами.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от anonymous-angler

отличная идея! нужно будет проверить и эти варианты.

bhfq ★★★★★
() автор топика
Ответ на: комментарий от wandrien

Ахаха хаха хаха. Какой JSON, это гну, детка.

t184256 ★★★★★
()
Ответ на: комментарий от bhfq

взят был первый ближайший архив программы на lua, до конца не запикал название. каталоги и файлы специально названы с спец. символами.

а говнокодерами почему-то оказались программисты «С» за программу которая старше lua и топик-стартера вместе взятых :-)

MKuznetsov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.