**/* не включает файлы верхнего уровня

#shell #terminal #wildcard #github-actions

#оболочка #терминал #подстановочный знак #github-действия

Вопрос:

У меня есть файловая структура, подобная:

  • a.txt
  • x/
    • b.txt
  • y/
    • c.txt
    • yz/
      • d.txt

Теперь я хочу просмотреть все файлы .txt. Насколько я знаю, for file in **/*.txt должна выполнять эту работу, верно? По крайней мере, это работает в моем zsh. Но мое действие GitHub игнорирует файл a.txt на верхнем уровне. Есть идеи, как это решить? Или есть другой простой способ сделать это с помощью GH actions?

Комментарии:

1. Насколько я знаю, файл в **/*.txt должен выполнять эту работу, верно? Нет. В некоторых оболочках это есть, в некоторых нет. Если вы не добавите определенный тег оболочки, как мы должны ответить на это?

2. **/*.txt включает символ / , поэтому результат должен включать / . Просто сделайте *.txt **/*.txt a9nd, если вы работаете с bash, вы должны включить ** расширение

Ответ №1:

** это расширение, которое поддерживают не все оболочки. Используйте find .

 find . -type f -name '*.txt' |
while IFS= read -r file; do
     # do something with file
done
  

Ответ №2:

Как упоминалось @KamilCuk, не все оболочки поддерживают ** расширения одинаково. В моем случае GitHub Actions использует bash по умолчанию и bash (по-видимому) не включает файл на корневом уровне для **/* (в отличие zsh от, например,)

В итоге я получил for file in *.txt **/*.txt