Xargs interpolação de strings, não inserindo um espaço

4

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
    
por aitchnyu 08.09.2012 / 15:24

3 respostas

9

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.

    
por 08.09.2012 / 15:39
3

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
    
por 08.09.2012 / 15:45
0

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

    
por 03.01.2013 / 01:16

Tags