найти все файлы, которые не начинаются с определенного символа? - PullRequest
0 голосов
/ 01 июля 2019

Я использую этот код, чтобы найти все php-файлы в скрипте bash.

for f in $(find ./src -name '*.php'); 
do 
    echo "$f"; 
done

Как я могу просмотреть все * .php файлы, но игнорировать те, которые начинаются с _?

Например, он должен перечислять index.php, но не _menu.php

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Параметр -name разрешает использование шаблонов стилей в стиле fnmatch , которые не являются регулярным выражением и не имеют отрицательных шаблонов. Итак, вам нужен один из двух вариантов (если вы хотите отфильтровать внутри операции поиска):

Вместо этого вы можете использовать RE. Вы должны знать, что регулярные выражения соответствуют всему пути, а не только имени, поэтому что-то вроде этого должно работать:

find ./src -regex '.*/[^_/][^/]*\.php'

Альтернативой является объединение -name с выражением отрицания (-a -not означает «а не»):

find ./src -name '*.php' -a -not -name '_*'
2 голосов
/ 01 июля 2019

Вы можете попробовать следующее:

#!/bin/bash
find ./src -name '[^_]*.php' | \
while read -r filename; do
   echo "$filename"
done   

объяснение

[^_]*     # all characters without _ at start 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...