find -name "*.html" | xargs -d"\n" -I"{}" touch ../template/{}
find -name "*.html" -exec touch ../template/{} \;
Observe que find *.html
está errado, já que os curingas são expandidos antes da execução do comando.
Eu quero repetir
touch ../template/filename
em que filename
vem de find
. Eu quero que xargs
aplique a operação touch
, mas eu não quero que ela insira um espaço como normalmente faz que deriva em:
touch ../template/ filename
Aqui está o meu comando incompleto. Como faço para completá-lo?
find *.html | xargs touch ../template/WHAT-NOW
find -name "*.html" | xargs -d"\n" -I"{}" touch ../template/{}
find -name "*.html" -exec touch ../template/{} \;
Observe que find *.html
está errado, já que os curingas são expandidos antes da execução do comando.
Isso é mais fácil de escrever como um loop de shell. Por exemplo, no shell C você pode escrever:
foreach i ('find -name "*.html"')
touch ../template/$i
end
E aqui está no bash:
for i in 'find -name "*.html"'
do
touch ../template/$i
done
E na minha shell Hamilton C (divulgação completa: sou o autor), adicionei um "..." curinga para andar na árvore, então você pode escrever:
foreach i (.../*.html)
touch ../template/$i
end
Considere o uso do GNU Parallel. Dessa forma, você evita surpresas desagradáveis se os nomes dos arquivos contiverem espaço 'ou ":
find *.html | parallel -X touch ../template/{/}
Veja os vídeos de introdução para saber mais: link