我有一堆文件夹,其中有一个名为 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 获取输出./
?
更新:
这是 jenkins curl 调用的全部内容:
find reallylongfolderstructure -name '360' -type d -exec 'curl http://user:[email protected]/jenkins/job/jobname/buildWithParameters?token=ourtoken¶meter={}' \;
输出
08:53:52 find: ‘curl http://user:token@ourdomain/jenkins/job/jobname/buildWithParameters?token=ourtoken¶meter=reallylongfolderstructure/something/lol/360’: No such file or directory
你写
这不是正在发生的事情。
find ... -exec
您已经为 的参数提供了一个命令echo "{}"
。请注意,这不是由;echo
找到的目录。find
这是一个名称中包含空格的单个命令。该find
命令(相当合理)无法执行名为echo "./workspace/6875538616c6/raw/2850cd9cf25b/360"
.删除参数周围的单引号
-exec
,您可能会发现不需要任何其他更改或解决方法:同样,在这里您需要删除传递给的整个值的引用
-exec
。但在这种情况下,您仍然需要引用存储参数,以便 shell 无法解释&
等。问题是您将实用程序名称和参数都引用为单个字符串,这会导致
find
尝试将整个内容作为命令的名称执行。而是使用
在某些较旧的 , 实现中
find
,当它与上面的另一个字符串连接时,{}
不会被识别为find
找到的路径名,您必须改用子 shell:致电
curl
:也可以看看:
在
bash
:globstar
shell 选项使glob**
模式可用。它的工作方式类似于*
,但匹配路径名中的斜杠。