Powershell & bash: получить все файлы, соответствующие каталогу по пути и имени файла

Я хочу работать со всеми файлами в имеющемся у меня каталоге, которые находятся в каком-то каталоге (например, .../bin/.../myfile.txt), где каждый ... может иметь любое количество каталогов в глубину. В оболочке nu я могу сделать это напрямую, используя ** (рекурсивный подстановочный знак), например: делает:

mycommand **/bin/**/myfile.txt

Я попробовал использовать Get-ChildItem следующим образом:

Get-ChildItem -Path . -Recurse -Filter myfile.txt

Но при этом будут получены все экземпляры myfile.txt, а не только те, которые вложены в каталог bin/. Также кажется, что ** в PowerShell нет, так что это не вариант. Есть ли какой-нибудь простой способ получить то, что я хочу?

Аналогично, как можно сделать то же самое в bash (опять же, похоже, ** мне недоступно)?

В bash вам нужно включить ** с помощью shopt -s globstar.

Gordon Davisson 29.06.2024 00:34

вы можете отфильтровать его в операторе where. что-то вроде Get-ChildItem -Path . -Recurse -Filter myfile.txt | Where{$_.FullName -like "$PWD*\bin\*myfile.txt"} Который будет фильтровать пути, начинающиеся с $PWD (рабочий каталог PowerShell), иметь папку с именем bin где-то в пути и заканчиваться соответствующим файлом. Да, нет необходимости помещать файл дважды, но так будет быстрее.

TheMadTechnician 29.06.2024 00:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это немного неуклюже, но в PowerShell можно сделать следующее:

Get-ChildItem -Path . -Recurse -Directory -Filter bin | Get-ChildItem -Recurse -File -Filter myfile.txt

Первая команда находит все каталоги bin/, а затем вторая просматривает эти каталоги и рекурсивно ищет нужный файл. Вы можете связать это вместе для любого количества каталогов между ними.

Если вы собираетесь это сделать, используйте параметр -directory в первом Get-ChildItem, чтобы поставщик файловой системы не возвращал никаких файлов. Вы могли бы добавить -file ко второму, но это позволит избежать возврата папки с именем myfile.txt, что кажется маловероятным, если только вы не ищете файлы без расширения.

TheMadTechnician 29.06.2024 00:38

Хорошее предложение! Отредактирую это.

MLavrentyev 29.06.2024 00:40

Аналогично, используя find, вы можете сделать

find . -type d -name bin -exec find {} -name myfile.txt \;

чтобы вывести список всех файлов с именем myfile.txt внутри любого подкаталога bin.

Другие вопросы по теме