find -exec의 출력을 기반으로 파일 만들기

find -exec의 출력을 기반으로 파일 만들기

HTML 파일의 일괄 유효성 검사(w3c 유효성 검사기) 페이로드를 위한 셸 스크립트를 작성 중입니다.

나는 그것을 사용하고 있다https://github.com/mozilla/html5-lint실제 검증 작업을 수행하기 위한 Python 스크립트를 제공합니다.

현재 실행 중인 명령은 다음과 같습니다.

find . -type f -name "*q2*.html" -print -exec ~/Downloads/html5-lint-master/html5check.py -e {} \;

이는 다음 형식의 출력을 실행하고 생성합니다.

The document is valid HTML5 + ARIA + SVG 1.1 + MathML 2.0 (subject to the utter previewness of this service).

유효한 경우.

또는 오류 목록 - 예:

Error: Attribute “placeholder” is only allowed when the input type is “email”, “number”, “password”, “search”, “tel”, “text”, or “url”.
From line 53, column 13; to line 53, column 92
Error: Attribute “placeholder” is only allowed when the input type is “email”, “number”, “password”, “search”, “tel”, “text”, or “url”.
From line 57, column 13; to line 57, column 95
There were errors. (Tried in the text/html mode.)

응답에 따라 출력이 포함된 HTML 파일과 동일한 폴더에 valid.txt 또는 valid.txt라는 파일을 생성하고 싶습니다.

이를 달성하는 최선의 방법에 대한 제안이 있으십니까?

답변1

다음과 같이 사용할 수 있습니다.

find . -type f -name '*q2*.html' -execdir sh -c '
    your/script "$1" > invalid.txt
    grep -q "Error:" invalid.txt || mv invalid.txt valid.txt
' sh {} \;

(in)valid.txt동일한 디렉토리에 일치하는 html 파일이 여러 개 있으면 파일을 덮어쓰게 됩니다 . 이름이 각 디렉터리에서 고유하도록 출력 파일 이름에 find포함할 수 있습니다 .$(basename "$1")

를 사용하면 -execdir발견된 각 파일의 디렉터리에서 명령이 실행됩니다.

grep -q1찾을 수 없으면 자동으로 종료되고 실패하므로( ) Error:후속 명령이 실행됩니다. ||오류가 발견되면 성공적으로 grep종료( 0)하고 mv실행하지 않습니다.

스크립트 등의 특정 오류를 포착하기 위해 더 추가할 수 있습니다. 또한 유효한 파일에 대한 검색 패턴이 존재하지 않는지 확인하십시오.


또 다른 접근 방식은 프로그램에서 인쇄한 메시지와 아무 관련이 없는 종료 코드를 사용하는 것입니다.

import sysPython 스크립트에 추가하고 sys.exit(0)유효하거나 sys.exit(42)유효하지 않은 파일에 사용합니다. 실행 후 종료 코드( $?)를 구문 분석하고 수행할 작업을 결정합니다.

또한보십시오:https://tldp.org/LDP/abs/html/exitcodes.html

예:

your/script "$1" > output.txt
result=$?
((result == 0)) && do stuff for valid file
((result == 42)) && do stuff for invalid file

관련 정보