Фон: Я пытаюсь получить общее количество строк всех файлов кода (.html | .htm | .php | .js | .css) в моей корневой сети dir (рекурсивно) путем подачи этого вывода на xargs wc -l | grep total
.команда regex/linux find не работает должным образом
$ find . -regex '.+\.php'
./inc/db.php
./inc/userauth.php
./index.php
.......... etc.
$ find . -regex '.+\.js'
./inc/jquery-1.7.1.js
./inc/script.js
$ find . -regex '.+\.(php|js)'
(returns nothing)
Согласно this,
abc(def|xyz) matches abcdef or abcxyz
Так стоит не .+\.(php|js)
матча всех .php файлов и .js файлов?
Вам нужно избежать определенных символов, которые интерпретируются оболочкой bash. Вы можете найти список этих символов здесь: http://www.grymoire.com/Unix/Quote.html –
@NickGarvey: Я думал, что эти символы не будут иметь никакого особого значения при использовании в одинарных кавычках. –
Не имеют никакого особого значения, когда в одинарных кавычках. Проблема, объясняемая в ответах, заключается в том, что экранирование требуется для определенных символов, если не используется ERE. По умолчанию GNU find использует emacs regex, для которого требуется экранирование. – jordanm