파일 내용을 기준으로 목록에서 파일 경로 제외

파일 내용을 기준으로 목록에서 파일 경로 제외

내가 실행한 명령은 디렉터리 아래 파일에 대한 상대 경로 목록을 제공합니다. find my_dir명령 자체는 다르지만 사용법 측면에서 생각해 보십시오.

목록의 각 파일에 대해 파일 자체의 내용을 기반으로 목록을 필터링하는 명령으로 파이프하고 싶습니다. 동일하거나 유사한 의미 체계를 찾고 있지만 egrep -v경로 자체가 아닌 파일 내용에 대해 정규식을 실행하려면 파일을 열고 읽어야 합니다.

간단한 파이프 명령 흐름을 사용하여 이를 수행하려면 어떻게 해야 합니까? 예:

find some_dir/ | egrep_contents -v 'Exclude pattern' | xargs -n1 do_something_with_filtered_files

이 경우 egrep_contents이상적으로는 이 질문에서 요청한 명령이 될 것입니다. 일치하는 항목이 발견될 때까지 파일의 각 줄에서 지정된 제외 패턴을 실행합니다. 일치하는 항목이 발견되면 파일 경로가 다음 파이프라인 명령으로 전달되지 않습니다.

상황에 맞게 Windows용 Git(MINGW)과 함께 제공되는 Git Bash에서 이러한 명령을 실행하고 있습니다.

답변1

grep옵션 이 당신이 찾고 있는 것일 --files-without-match수도 있습니다. -L해당 파일 내용이 주어진 패턴과 일치하지 않는 파일 경로를 인쇄하도록 grep에 지시합니다. 예를 들어,

$ echo "bar" > foo
$ echo "quux" > baz

$ ls
baz foo

$ find . -type f | xargs -n1 grep -EL bar | xargs -n1 cat
quux

cat여기서 "quux" 는 내용에 "bar"가 포함되지 않은 파일에서 실행한 결과 이기 때문에 인쇄됩니다 .

관련 정보