개행으로 구분된 파일 경로 목록이 모두 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
.tex
git 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
줄 바꿈 등을 포함하는 값과 파일 이름에 대한 일반적인 경고가 적용되지만, 비정상적인 일이 발생하지 않는다고 가정하면 모든 것이 바로 작동합니다.