Eu tenho um monte de pastas que têm uma subpasta em algum lugar chamada 360.
find . -name '360' -type d -exec 'echo "{}"' \;
resultado:
find: echo "./workspace/6875538616c6/raw/2850cd9cf25b/360": No such file or directory
Para cada item encontrado, quero fazer uma chamada curl e acionar um trabalho de compilação do Jenkins. Meu problema é que ./ parte no início. Eu deveria ser capaz de cortar assim:
find . -name '360' -type d -exec 'echo {} | cut -c 2-' \;
Mas como ele começa com um ./ ele será executado ("Nenhum arquivo ou diretório"). Como posso obter a saída de find, sem o líder ./
?
atualizar:
Aqui está a coisa toda com uma chamada de jenkins curl:
find reallylongfolderstructure -name '360' -type d -exec 'curl http://user:[email protected]/jenkins/job/jobname/buildWithParameters?token=ourtoken¶meter={}' \;
resultado
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
Você escreve
Não é isso que está acontecendo. Você forneceu um único comando para o
find ... -exec
parâmetro deecho "{}"
. Observe que isso não éecho
e o diretório encontrado porfind
; é um único comando que inclui um espaço em seu nome. Ofind
comando (bastante razoavelmente) não pode executar um comando chamadoecho "./workspace/6875538616c6/raw/2850cd9cf25b/360"
.Remova as aspas simples em torno do
-exec
parâmetro e você pode descobrir que não precisa de nenhuma alteração ou solução alternativa:Da mesma forma, aqui você precisa remover a cotação de todo o valor passado para
-exec
. Mas neste caso você ainda precisa citar os argumentos de armazenamento para que o shell não possa interpretar&
, etc.O problema é que você está citando o nome do utilitário e o argumento como uma única string, o que faz
find
com que tente executar a coisa toda como o nome do comando.Em vez disso, use
Em algumas implementações mais antigas de
find
,{}
não será reconhecido como o nome do caminhofind
encontrado quando concatenado com outra string como acima, e você teria que usar um shell filho:Com a sua chamada para
curl
:Veja também:
Em
bash
:A
globstar
opção shell disponibiliza o**
padrão glob. Funciona como*
, mas corresponde a barras em nomes de caminho.