Сzsh
:
set -o extendedglob # best in ~/.zshrc
c_regular_files=(
${(0)^"$(locate -0 "${${PWD%/}//(#m)[]\\*?]/\\$MATCH}/*.c")"}(N.)
)
echo there are at least $#c_regular_files regular files whose name ends in.c
[
, ?
, \
и *
в $PWD
, чтобы locate
не интерпретировать их как операторы подстановки (с -r
было бы еще хуже для регулярных выражений, которые имеют больше операторов, включая .
, общие в именах файлов)$PWD
== /
требует особой обработки; с $PWD
вместо ${PWD%/}
мы будем запускать locate -0 "//*.c"
, который ничего не вернет. -0
для файлов, которые должны быть NUL -с разделителями (новая строка не будет работать, так как это разрешено в путях к файлам ). .
для обычного файла. В отличие от [ -f
, это исключает символические ссылки на обычный файл. Если вы хотите, чтобы каждый не -символическая ссылка .c
файл (разрешал любой другой тип файла, такой как каталог, fifo, сокет... ),замените .
на ^@
. В любом случае обратите внимание, что locate
возвращает список, основанный на последнем обновлении базы данных locate
, что может не отражать текущую реальность.
Мой личный VPN переписал мой файл resolv.conf и не вернул его в нормальное состояние.
Я прокомментировал старый контент и добавил в файл два новых DNS-сервера, и все заработало. так выглядит новый файл:
1 # Generated by expressvpn
2 # search expressvpn
3 # nameserver 10.47.0.1
^old content^
4 nameserver 8.8.8.8
5 nameserver 8.8.4.4
Большое спасибо A.B. за то, что указал мне правильное направление