파일을 찾고 디렉토리 경로만 가져오기

파일을 찾고 디렉토리 경로만 가져오기

파일을 찾고 grep파일의 특정 문자열에 대한 표현식을 찾은 다음 파일이 있는 전체 디렉터리 경로를 얻으려고 합니다.

find `pwd` -iname '*.py' -type f -exec bash -c "grep -l 'nn'; sed 's[\/](.*)*[\/]/d' {}" \; 

그러나 이 sed표현식을 사용하면 파일을 반복적으로 인쇄하고 디렉터리 경로에서 제거하는 대신 터미널이 중단됩니다.

다음을 통해 부분적으로 이를 달성할 수 있습니다.

find `pwd` -iname 'nn*' -type d

그러나 이는 파일 내부의 이름 nn이 아닌 디렉토리 이름을 가질 것으로 예상합니다 .nn

답변1

경로에 파일 이름을 포함하려면 다음을 수행하십시오.

shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath

일치하는 파일이 있는 디렉터리만 가져옵니다.


```bash
shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath | xargs dirname

중복된 디렉터리 이름을 제거하려면:

shopt -s globstar
grep -l 'nn' **/*.py | xargs realpath | xargs dirname | sort -u

파일이 많으면 .py"매개변수 목록이 너무 김" 오류가 발생할 수 있습니다.

이 경우 find를 다음과 같이 사용하십시오.

find `pwd` -iname '*.py' | xargs grep -l 'nn' | xargs dirname | sort -u

위의 모든 내용은 경로에 개행 문자가 없는 디렉토리를 가정합니다. 경로에 줄바꿈이 있을 수 있는 경우 의견을 추가해 주시면 더 많은 솔루션을 추가하겠습니다.

관련 정보