셸 스크립트: .tex 소스 파일이 있는 파일을 제외하도록 .pdf 파일 목록을 필터링합니다.

셸 스크립트: .tex 소스 파일이 있는 파일을 제외하도록 .pdf 파일 목록을 필터링합니다.

개행으로 구분된 파일 경로 목록이 모두 pdf 파일에 있습니다. *.tex동일한 디렉터리에 해당 파일이 있는 모든 파일을 필터링하여 자동으로 생성된 것으로 가정하고 싶습니다 .

예를 들어, 목록에 foo.tex, foo.pdf, 가 포함된 경우 bar.pdf에만 스크립트가 출력되도록 하고 싶습니다 bar.pdf. foo/foo.tex및 이 있는 경우 bar/foo.pdf스크립트를 출력하고 싶습니다 bar/foo.pdf.

(예를 들어 설명된 대로이 문제:tex 파일과 외부에서 생성된 pdf 파일이 포함된 git 저장소가 있습니다. 자동 생성된 PDF는 git으로 추적하면 안 되지만 다른 PDF는 추적해야 합니다. 내가 생각해낸 해결책은 파일에서 생성된 PDF가 아닌 추적되지 않은 PDF가 있을 때 경고하는 git post-commit 후크를 추가하는 *.pdf것이 었습니다. 추적되지 않은 PDF 목록 가져오기를 사용하고 있지만 다음 단계를 깔끔하게 구현하는 방법을 잘 모르겠습니다. ).gitignore.texgit status --ignored *.pdf

답변1

일반 루프를 사용할 수 있습니다[ -e그리고${xxx%.pdf}파일 이름을 확인하고 구성하십시오. 그러면 표준 입력의 경로가 한 줄에 하나씩 읽혀집니다.

while read path
do
    [ -e "${path%.pdf}.tex" ] || echo "$path"
done

"${path%.pdf}" 다음으로 확장 $path".pdf"를 제거한 다음 끝에 ".tex"를 넣으면 됩니다. 존재하는 경우 -e아무 작업도 수행하지 않고, 그렇지 않은 경우( ||) PDF 경로를 인쇄합니다. 원하는 경우 더 복잡한 논리와 동작을 넣을 수 있습니다.

IFS줄 바꿈 등을 포함하는 값과 파일 이름에 대한 일반적인 경고가 적용되지만, 비정상적인 일이 발생하지 않는다고 가정하면 모든 것이 바로 작동합니다.

관련 정보