amarao (amarao_san) wrote,
amarao
amarao_san

Category:

pipe style programming

В парадигме программирования с xargs есть одна одна проблема - это отсутствие культурного filter.

Поясняю:
У нас есть генератор: (find, ls, cat - не важно что, важно, что по штуке между delimiter, то есть чаще всего по штуке на строку)
У нас есть фильтр по имени (grep)
У нас есть map для значений (awk)
У нас есть карринг для программ (xargs), который позволяет выполнить программу для каждого из списка, причём в качестве одного из множества других аргументов. xargs делает карринг для программы, и из N аргументов оставляет 1 (или M).

Но у нас нет фильтра с функцией.

Давайте дам простой пример:

cat filelist| ?????filter -I FILENAME check_file FILENAME|xargs -I FILENAME do_file FILENAME

У нас нет программы, которая бы позволила пропустить имя в пайпе только если выполненная программа вернула нам 0 (то есть успех). И это страшно бесит, потому что в минимальном виде это может быть ещё починено:

cat filelist|xargs -I FILENAME sh -c "check_filename FILENAME && do_file FILENAME", но во-первых это форк шелла на каждый файл, во-вторых не всюду работает (в частности, не работает, если нам надо дальше преобразовывать имена файлов).

Либо такой программы нет, либо я не достаточно хорошо знаю coreutils.
Tags: coreutils, shell programming, xargs
Subscribe

  • А вот вам пост об исторической нелогичности

    Вот есть у меня файл /etc/default/grub.d/unified.cfg для включения unified cgroups для systemd. А вот вопрос (ответ на который я хорошо знаю, но…

  • апгрейдовое

    А вот шифрованный home я переносил вообще ленивым образом - тупо сделал dd для раздела и поправил путь к устройству для кастомного pam_exec-скрипта.…

  • VM VS baremetal

    Наконец-таки у меня появились цифры для обсуждения этого вопроса в отрыве от IO. Известно, что IO на виртуалках всегда медленее, чем на bare-metal, и…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 18 comments

  • А вот вам пост об исторической нелогичности

    Вот есть у меня файл /etc/default/grub.d/unified.cfg для включения unified cgroups для systemd. А вот вопрос (ответ на который я хорошо знаю, но…

  • апгрейдовое

    А вот шифрованный home я переносил вообще ленивым образом - тупо сделал dd для раздела и поправил путь к устройству для кастомного pam_exec-скрипта.…

  • VM VS baremetal

    Наконец-таки у меня появились цифры для обсуждения этого вопроса в отрыве от IO. Известно, что IO на виртуалках всегда медленее, чем на bare-metal, и…