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

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

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

  • 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
  • Изменение оболочки по умолчанию без привилегий chsh или администратора
  • Запуск сценария bash из оболочки zsh
  • Как увеличить историю в oh-my-zsh?
  • Импорт априорной ОС zsh в Манджаро
  • При передаче аргументов в программы через переменные массива
  • Как изменить интерпретацию переменной в `zsh`?
  • Перемещение дескрипторов файлов в 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 - лучшая ОС в мире.