LINUX.ORG.RU

Списки в bash

 ,


0

2

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

Что имеется в виду. Допустим создается список:

find . -iname "*.htm*" > hmtl.list

После этого данный список редактируется в зависимости от нужд в любом текстовом редакторе. И лишь после этого по этому отредактированному списку производится дальнейшая работа. Например:

grep "<title" $(cat hmtl.list)

Другой наглядный (и реальный, кстати) пример:

dpkg -l $(cat packages.list)

Где packages.list - текстовой файл, содержащий имена интересующих пакетов. Эта команда выводит таблицу установленных версий пакетов, перечисленных в списке.

Простые команды, а нигде не упоминаются. Почему?

Deleted

Чё-то ты упоролся, иди погуляй.

Ещё твои cmd $(cmd2) отвалятся из-за ограничения на длину командной строки.

anonymous
()

Потому, что есть

find . -iname "*.htm*" -exec grep "<title" "{}" \;
и
find . -iname "*.htm*" -print0 | xargs -0 -n 1 -P 1 grep "<title"

saahriktu ★★★★★
()

Это не списки, это файлы.

grep "<title" $(cat hmtl.list)

Так с файлами работать нельзя. И это много где упоминается.

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

Нельзя

Нельзя! или Нельзя? Ссылки в студию, пожалуйста. Хотелось бы почитать подробное разъяснение.

Deleted
()
Ответ на: комментарий от saahriktu

Пайп

Эта конструкция самая распространённая. Спору нет. Но почему о моей нет упоминаний. Плюс к этому, не всё в пайп закрутишь. Например, dpkg не закрутился.

Deleted
()
Ответ на: комментарий от Kroz

Списки

Списки - это списки. И информатика здесь не при чём. Речь за bash. А конкретнее, за списки файлов.

Deleted
()
Ответ на: Списки от Deleted

Списки - это списки.

Именно.

Список - это когда для каждого элемента выделяется память; каждый элемент содержит само значение плюс ссылку на следующий элемент; а для двунаправленных списков - еще и на предыдущий. Отлично масштабируется, легок в трансформации, но сложно добраться до элемента с конкретным индексом, и кушает дополнительную память на ссылки/указатели.

Массив (вектор) - это когда выделяется память для всех элементов скопом, и значения хранятся друг за дружкой. Экономный в памяти, легко найти элемент по индексу, но сложно увеличивается/уменьшается, нужно потрудиться чтобы вставить/удалить элемент.

Файл есть файл. Еще есть временный файл, о котором ты говоришь.

Если ты уж общаешься в IT кругах , то потрудись освоить базовую терминологию. Хотябы тогда, когда тебя в нее тыкают носом. Иначе будут трудности с пониманием.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: Пайп от Deleted

Но почему о моей нет упоминаний.

Из за лимитов. При достаточно большом кол-ве имён файлов произойдёт переполнение и всё засыпется. Перебирать по одному гораздо надёжнее.

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

Лимиты

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

Deleted
()
Ответ на: комментарий от Kroz

Информатика здесь не при чём. Речь за bash.

Deleted
()
Ответ на: комментарий от saahriktu

Перебирать по одному гораздо надёжнее.

Чтоже вы в каждом вопросе свой xargs пихаете? Вам же сказали: есть файл, есть bash. Написать xargs на bash раз плюнуть, тем более для вашего «по одному» действию, что для grep просто жрать ресурсы на ровном месте, запуская его на каждый файл.

vodz ★★★★★
()
Ответ на: Пайп от Deleted

Почему нет упоминания? Есть! В статьях «как не надо делать в bash». Это плохая практика, она якобы работает в простых случаях, но даёт труднодиагностируемые ошибки впоследствии.

Например, имена файлы могут содержать пробелы. Хуже того, в именах файлов могут быть переводы строк!

Кроме того, есть ограничение на число аргументов командной строки. xargs это учитывает, prog $(<files.txt) - нет.

Могут возникнуть и другие грабли.

Иногда описанная тобой конструкция может пригодиться, но это так редко нужно и можно, что не стоит упоминания (хотя бы оттого, что ручного редактирования списка файлов всегда хочется избежать).

Есть только один надёжный способ создать список файлов, он называется «директория».

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

Статьи

Запрос Google: как не надо делать в bash.

Результат по теме: 0 (как минимум на первых трёх страницах).

Уважаемый legolegs, не морочте людям голову.

Deleted
()
Ответ на: комментарий от legolegs

google

за запрос google премного благодарен. Процесс пошёл. Будем изучать.

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