배경 : 루트 웹에있는 모든 코드 파일 (.html | .htm | .php | .js | .css)의 전체 줄 수를 얻으려고합니다. 이 출력을 xargs wc -l | grep total
으로 파이프하여 dir (재귀 적으로). this에 따르면 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)
,
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