자신의 파일 이름을 포함하지 않는 파일을 찾는 방법

자신의 파일 이름을 포함하지 않는 파일을 찾는 방법

템플릿을 사용하여 파일을 생성하는 경우 템플릿 내부에 템플릿 이름을 포함하는 것이 중요합니다. 생성된 파일을 읽을 때 이를 생성하는 데 사용된 템플릿을 찾는 데 도움이 됩니다.

자신의 파일 이름을 포함하지 않는 디렉토리의 모든 템플릿을 검색하고, 찾은 템플릿을 인쇄하고, 발견되면 0이 아닌 코드로 종료하고 싶습니다.

지금까지 이것이 내가 생각해낸 것입니다.

find . -name "*.xyz" -exec sh -c 'grep -L $(basename {}) {}' \;

이는 성공적으로 파일을 찾아서 인쇄하지만 파일이 발견되었는지 여부에 관계없이 0 종료 코드로 종료됩니다. 관련 파일을 찾고 발견된 경우 0이 아닌 코드로 종료하려면 어떻게 해야 합니까?

답변1

관련 파일을 찾고 발견된 경우 0이 아닌 코드로 종료하려면 어떻게 해야 합니까?

결과를 grep ''. 이 도구는 텍스트 스트림을 변경하지 않지만 종료 상태를 생성 0하거나 1줄이 통과하는지 여부에 따라 생성됩니다.

나는 당신이 다른 방식을 원한다는 것을 알고 있습니다. 내가 당신이라면 나는 그 행동에 적응할 것입니다 grep. 내 근거는 다음과 같습니다. 기준에 맞는 파일을 알고 싶습니다. 명령이 이를 찾으므로성공하다적어도 하나의 파일이 있는지 찾는 중입니다.

그러나 반대 행동을 고집한다면종료 상태를 무효화. 예:

! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''

sh참고 내부에서 호출을 디버깅했습니다 find. 원래 접근 방식은 {}확장 되면 역효과를 낳을 것입니다 ./a;rm -rf ~;.xyz(많은 Linux 파일 시스템에서 유효한 파일 이름임).

답변2

아마도 grep .... && <do if found> || <do if not found>작업과 같은 것이 있을 것입니다 .

답변3

for f in *.xyz; do
    grep -q $f $f || echo "$f does not contain itself"
done

찾고 있는 파일 목록을 제공하지만 여전히 0을 반환합니다(에코가 성공하기 때문에).

관련 정보