템플릿을 사용하여 파일을 생성하는 경우 템플릿 내부에 템플릿 이름을 포함하는 것이 중요합니다. 생성된 파일을 읽을 때 이를 생성하는 데 사용된 템플릿을 찾는 데 도움이 됩니다.
자신의 파일 이름을 포함하지 않는 디렉토리의 모든 템플릿을 검색하고, 찾은 템플릿을 인쇄하고, 발견되면 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을 반환합니다(에코가 성공하기 때문에).