将“-exec”与查找一起使用时“没有这样的文件或目录”

Tam*_*más 7 find cut

我有一堆文件夹,其中有一个名为 360 的子文件夹。

find . -name '360' -type d -exec 'echo "{}"' \;
Run Code Online (Sandbox Code Playgroud)

输出:

find: echo "./workspace/6875538616c6/raw/2850cd9cf25b/360": No such file or directory
Run Code Online (Sandbox Code Playgroud)

对于每个找到的项目,我想做一个 curl 调用,并触发 Jenkins 构建作业。我的问题是 ./ 一开始的部分。我应该能够像这样切断它:

find . -name '360' -type d -exec 'echo {} | cut -c 2-' \;
Run Code Online (Sandbox Code Playgroud)

但是因为它以 ./ 开头,所以它只会被执行(“没有这样的文件或目录”)。如何在没有前导的情况下从 find 获得输出./

更新:

这是 jenkins curl 调用的全部内容:

find reallylongfolderstructure -name '360' -type d -exec 'curl http://user:token@ourdomain.net/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter={}' \; 
Run Code Online (Sandbox Code Playgroud)

输出

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
Run Code Online (Sandbox Code Playgroud)

roa*_*ima 16

你写

因为它以 ./ 开头,所以它只会被执行(“没有这样的文件或目录”)。

这不是正在发生的事情。您已为 的find ... -exec参数提供了一个命令echo "{}"。请注意,这不是echofind;找到的目录。它是一个在其名称中包含一个空格的单个命令。该find命令(相当合理)无法执行名为echo "./workspace/6875538616c6/raw/2850cd9cf25b/360".

删除-exec参数周围的单引号,您可能会发现不需要任何其他更改或解决方法:

find . -name '360' -type d -exec echo "{}" \;
Run Code Online (Sandbox Code Playgroud)

同样,在这里您需要删除传递给 的整个值的引用-exec。但在这种情况下,您仍然需要引用存储参数,以便 shell 无法解释&等。

find reallylongfolderstructure -name '360' -type d -exec curl 'http://user:token@ourdomain.net/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter={}' \; 
Run Code Online (Sandbox Code Playgroud)