다음 명령은 모든 청구서 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 '{}' \;