이름 패턴으로 파일을 검색하고 해당 디렉토리에서 명령을 실행하는 방법은 무엇입니까?

이름 패턴으로 파일을 검색하고 해당 디렉토리에서 명령을 실행하는 방법은 무엇입니까?

다음 명령은 모든 청구서 pdf 파일을 검색하고 축소판 파일이 동일한 디렉터리에 있는지 확인하는 것입니다. 그렇지 않은 경우 디렉토리를 인쇄해야 합니다. 나중에 썸네일을 생성하는 명령을 추가하겠습니다.

find . -maxdepth 2 -type f -name "invoice_*.pdf" -exec sh -c '[ -f "$(dirname {})/thumbnail.jpeg" ] || echo {}' ';'

명령이 실행 중이지만 파일 경로 외에 다음이 표시됩니다.

sh: 1: Syntax error: "(" unexpected (expecting ")")

파일 경로가 명령으로 해석되는 것 같습니다.

답변1

(파일 이름 중 하나에 따옴표가 없고 따옴표가 없습니다.

노력하다:

find . -mindepth 3 -maxdepth 3 -type f -exec sh -c '[ -f "$(dirname '"'{}'"')/thumbnail.jpeg" ] || echo "{}"' \;

'"'{}'"'파일 이름에 a가 있는 경우 dirname 명령에 큰따옴표를 전달하여 인용을 수행합니다 . ('[ -f .. ]'명령에는 큰따옴표가 필요하며 echo 명령도 마찬가지입니다!

스크립트를 호출하고 경로를 매개변수로 전달하는 것이 더 쉬울 수 있으므로 find여러 참조 및 대체 레이어에 대해 생각할 필요가 없습니다. 예를 들어(테스트되지 않음):

$ cat script
#!/bin/bash --
dir=$(dirname "${1}")
[ -f "${dir}/thumbnail.jpeg" ] || echo "${1}" 

$ find . -mindepth 3 -maxdepth 3 -type f -exec ./script '{}' \;

관련 정보