次のコマンドは、すべての請求書pdfファイルを検索し、サムネイルファイルが同じディレクトリにあることを確認します。そうでない場合は、ディレクトリを印刷する必要があります。後でサムネイルを生成するコマンドを追加します。
find . -maxdepth 2 -type f -name "invoice_*.pdf" -exec sh -c '[ -f "$(dirname {})/thumbnail.jpeg" ] || echo {}' ';'
コマンドは実行中ですが、ファイルパスに加えて以下が表示されます。
sh: 1: Syntax error: "(" unexpected (expecting ")")
ファイルパスがコマンドとして解釈されるようです。
答え1
(
ファイル名の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 '{}' \;