find를 사용하여 현재 하위 디렉토리에있는 모든 파일 목록을 만들 수 있습니다. 하위 디렉토리 "cache"에있는 파일은 제외됩니다. 첫 번째 코드는 다음과 같습니다.파이핑을 사용하면 빠른 디렉토리 제외를 위해 grep 결과를 찾을 수 있습니다.
find . -wholename './cach*' -prune -o -print
이제이 코드를 grep 명령으로 파이프합니다. 그것은 단순해야한다고 생각합니다 :
find . -wholename './cach*' -prune -o -print | xargs grep -r -R -i "samson"
...하지만이 결과는 대부분 캐시 디렉토리에서 반환됩니다. 나는 xargs 레퍼런스를 삭제하려고 시도했으나 파일 자체가 아니라 파일 이름의 텍스트에 grep을 실행하여 기대했던대로 동작한다. 내 목표는 캐시 된 콘텐츠가 아닌 모든 파일에서 "samson"을 찾는 것입니다.
이 예제에서는 이중 greps를 사용하여이 문제를 해결할 수 있지만이 한 행이 왜 이런 식으로 행동하는지 궁금합니다. 나는이 두 가지 명령을 사용하면서 수정하는 방법에 대한 생각을 듣고 싶다. (이렇게하면 속도면에서 이점이있다.)
(이 BTW, CentOS는 5입니다.) 대신 다른 명령에 배관의 발견에
고마워요! 재귀 제거는 나를위한 트릭이었습니다. (오래 된 습관은 열심히 죽는다. 필자가 보통 실수로 "-r -i -I"를 사용했기 때문에 실수로 반복되는 재귀 플래그보다 훨씬 의미가있다.) "wholename"부분은 괜찮 았지만, 원하지 않는 서브 디렉토리가 실제로 현재 디렉토리의 루트 레벨이기 때문입니다. 그래서 지금은 : 'find. -wholename './cach*'-prune -o -print | xargs grep -i -I "samson"' – eternalnewb
굉장하고, 기뻤습니다. =] – newfurniturey