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

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

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

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

输出:

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

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

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

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

更新:

这是詹金斯卷曲调用的全部内容:

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。但在这种情况下,您仍然需要引用存储参数,以便 shell 无法解释&等。

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

答案2

问题是您将实用程序名称和参数都作为单个字符串引用,这会导致find尝试将整个内容作为命令名称执行。

而是使用

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

在 的一些较旧的实现中find{}将不会被识别为find与上面的另一个字符串连接时找到的路径名,并且您必须使用子 shell 来代替:

通过您的电话curl

find -type d -name '360' -exec sh -c '
    for pathname do
        curl "http://user:[email protected]/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter=$pathname"
    done' sh {} +

也可以看看:


bash

shopt -s globstar

for pathname in ./**/360/; do
    curl "http://user:[email protected]/jenkins/job/jobname/buildWithParameters?token=ourtoken&parameter=$pathname"
done

shellglobstar选项使**glob 模式可用。它的工作方式类似于*,但匹配路径名中的斜杠。

相关内容