find で "-exec" を使用すると、「該当するファイルやディレクトリはありません」

find で

360というサブフォルダを含む複数のフォルダがあります。

find . -name '360' -type d -exec 'echo "{}"' \;

出力:

find: echo "./workspace/6875538616c6/raw/2850cd9cf25b/360": No such file or directory

見つかったプロジェクトごとにカール呼び出しを実行し、Jenkinsビルド操作をトリガーしたいと思います。私の問題は最初に./部分です。次のように切り取ることができるはずです。

find . -name '360' -type d -exec 'echo {} | cut -c 2-' \;

しかし、./で始まるので、単に実行されます(「そのファイルやディレクトリはありません」)。プリアンブルなしでfind出力をどのように取得できますか./

修正する:

以下はJenkinsカールコールの完全な内容です。

find reallylongfolderstructure -name '360' -type d -exec 'curl http://user:[email protected]/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter={}' \; 

出力

08:53:52 find: ‘curl http://user:token@ourdomain/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter=reallylongfolderstructure/something/lol/360’: No such file or directory

ベストアンサー1

あなたは書く

./で始まるので、単に実行されます(「該当するファイルやディレクトリはありません」)。

これは今起こっていることではありません。find ... -exec引数とともに単一のコマンドを提供しましたecho "{}"。このディレクトリはecho見つかったディレクトリではありませんfind。名前にスペースを含むコマンド。このfindコマンドは(非常に合理的に)名前付きコマンドを実行できませんecho "./workspace/6875538616c6/raw/2850cd9cf25b/360"

パラメータの周りの一重引用符を削除する-execと、他の変更や回避策が不要になる可能性があります。

find . -name '360' -type d -exec echo "{}" \;

ここでも、渡された値全体への参照を削除する必要があります-exec。ただし、この場合でも、シェルがそれを解釈できないように保存されたパラメータを引用する必要があります&

find reallylongfolderstructure -name '360' -type d -exec curl 'http://user:[email protected]/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter={}' \; 

おすすめ記事