폴더당 검색 결과 수를 제한하는 방법은 다음과 같습니다. 예:
다음 명령을 사용하십시오.
grep --include=*.php -Ril '<?' '/var/www/'
다음 메시지가 나타납니다.
/var/www/test.php
/var/www/test1.php
/var/www/phpinfo1.php
/var/www/phpinfoo.php
/var/www/phpinfooo.php
/var/www/1/php.php
/var/www/1/php3.php
/var/www/1/index.php
/var/www/1/indexed.php
/var/www/1/indexin.php
/var/www/test/tester.php
/var/www/test/info.php
/var/www/test/inform.php
/var/www/test/conf.php
폴더당 3개의 결과만 필요하므로 다음과 같습니다.
/var/www/test.php
/var/www/test1.php
/var/www/phpinfo1.php
/var/www/1/php.php
/var/www/1/php3.php
/var/www/1/index.php
/var/www/test/tester.php
/var/www/test/info.php
/var/www/test/inform.php
답변1
재귀 grep은 디렉토리 구조에 관계없이 전체 트리를 검색합니다. 구조를 반복하고 각 디렉터리를 개별적으로 grep해야 합니다.
find /var/www -type d -print | while read dirname; do grep -sil '<?' "$dirname"/*.php | head -3; done
grep -s
디렉토리에 PHP 파일이 없는 경우를 처리합니다 .
답변2
이런 일이 있으면 어떻게 해야 할까요?
for DIR in $( find ./test -mindepth 1 -type d ); do
find "$DIR" -type f | grep "\.php" | head -n3
done
find ./test -mindepth 1 -type d
test
상위 디렉터리를 제외한 디렉터리 내의 모든 디렉터리를 나열합니다.
find "$DIR"
각 디렉토리의 전체 경로를 나열한 다음 php 확장자를 grep하고 head를 사용하여 세 개의 경로를 나열하십시오.
mkdir test
cd test
mkdir dir{test,1,anotherdir} && touch dir{test,1,anotherdir}/file{a,b,c,d,e,f}.php
cd ..
산출:
./test/dirtest/filed.php
./test/dirtest/filec.php
./test/dirtest/filee.php
./test/dir1/filed.php
./test/dir1/filec.php
./test/dir1/filee.php
./test/diranotherdir/filed.php
./test/diranotherdir/filec.php
./test/diranotherdir/filee.php