Создайте список файлов из файла, содержащего ряд шаблонов глобусов

Я ищу способ создания списка файлов путем разбора файла, содержащего последовательность шаблонов zsh globbing.

Конечная цель – передать этот список файлов в hg add в mercurial. Для тех, кто интересуется этой конкретной частью, мой вопрос мотивирован этим другим вопросом, который я задал в StackOverflow:

  • При использовании zsh tab-completion игнорируйте CDPATH, если локальный файл или каталог совпадают
  • находить файлы без расширения
  • Bash: Синтаксическая ошибка при @ ()
  • Возможно ли иметь привязки клавиш vim в терминале?
  • Избегание ошибок из-за нерасширенной звездочки
  • Фиксация прокрутки в nano, запущенной в tmux в mate-terminal
    • Mercurial "hginclude"? (синтаксис globbing для указания файлов для отслеживания)

    Пример файла (назовем его .hginclude ) будет выглядеть следующим образом:

     .zshrc .zprofile .less* .emacs*/** src*/** .hg* .bash* .inputrc .ssh 

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

    print globbing_pattern

    на каждой строке, где globbing_pattern ссылается на каждую строку в файле .hginclude выше.

    В конечном счете, список файлов должен быть списком, который я могу передать hg add для отслеживания этих файлов в mercurial.

    Предположение для этой части состоит в том, что у меня есть .hgignore со следующим:

     syntax: glob * 

    что означает: не отслеживать ничего, если явно не добавить через команду hg add .

  • Изменение цвета при смене каталога
  • Постоянный каталог стеков через сессии в zsh
  • scp не отображает вывод при использовании с gnu parallel
  • Могу ли я выделить текущую строку приглашения в zsh?
  • Обновление функций оболочки и псевдонимов через переменные среды
  • Как найти / исправить ошибку в пути
  • 2 Solutions collect form web for “Создайте список файлов из файла, содержащего ряд шаблонов глобусов”

    См. Hg help patterns . Mercurial поддерживает чтение имен файлов из файла, поэтому вы можете делать

     $ hg add listfile:myfiles.txt 

    и myfiles.txt содержат имена файлов для добавления. Что еще более интересно для вас, так это то, что «имя файла» в Mercurial может быть шаблоном glob. Таким образом, вы можете myfiles.txt

     .zshrc .zprofile glob:.less* glob:.emacs*/** 

    и т. д., и команда hg add выше сделает правильные действия.

    Вы можете даже использовать наборы файлов для выбора файлов. Это язык find который позволяет вам делать что-то вроде

     set:exec() and not binary() 

    для выбора исполняемых файлов, которые не являются бинарными, то есть скриптами.


    Вышеуказанные команды будут уважать файл .hgignore и поэтому вы не сможете использовать их напрямую, чтобы решить вашу проблему. Однако вы можете использовать

     $ hg status --all --no-status listfile:myfiles.txt 

    чтобы получить список совпадений файлов по шаблонам, включая любые файлы, которые обычно игнорируются. Затем вы можете использовать этот список файлов с помощью hg add :

     $ hg status -A -n -0 listfile:myfiles.txt | xargs -0 hg add 

    Попробуй это:

      hg add `for i in `cat myfiles.txt` ; do ls $i ; done` 

    где myfiles.txt содержит глобусы. Но, конечно, предложение initrpc является более чистым.

    Linux и Unix - лучшая ОС в мире.