Como passar a variável do resultado do comando find para dd

0

Estou tentando transferir o arquivo CentOS.iso para uma unidade flash USB usando o comando dd passando uma variável que é resultado do comando find.

Eu quero passar variável como esta

dd if=$isofile of=/dev/sdb

Primeiro eu preciso criar uma variável apropriada, então é assim que eu faço

isofile='find ~ -iname "*centos*minimal*.iso"'

No entanto, a saída da execução da variável criada

$isofile

não parece promissor. Não posso passar isso para o comando dd if= .

É possível alcançar isso? Para passar a variável para if= ?

Na mesma nota, seria possível passar o resultado do comando find para -exec dd {} e transferir o arquivo .iso dessa maneira?

    
por Tomas.R 24.05.2018 / 23:06

2 respostas

2

Você está usando o comando de escape incorreto. O comando que você está usando usando um único caractere enquote basicamente define toda a sua string de busca como uma string de letras. (Você pode ver isso digitando echo $ isofile). O que você quer fazer é executar isso e então fazer a saída em uma variável. Existem pelo menos 2 maneiras de fazer isso -

A maneira que você provavelmente pretendeu - que é usar backticks ao invés de avançar, ie

  isofile='find /home/tomas -iname "*centos*minimal*.iso"'

ou uma versão mais moderna e semelhante

  isofile=$( find /home/tomas -iname "*centos*minimal*.iso" )

Ambos os itens acima têm o problema de se houver mais de 1 arquivo correspondente. Você pode consertar isso fazendo algo como o abaixo para pegar a primeira linha.

 isofile=$( find /home/tomas -iname "*centos*minimal*.iso" | head -1 )
    
por 24.05.2018 / 23:22
2

a resposta davidgo não aborda a última parte. Deixe-me.

would it be possible to pass the find command's result to -exec dd {} and transfer the .iso file that way?

Sim. Sua primeira abordagem pode ser:

find ~ -iname "*centos*minimal*.iso" -exec dd if={} of=/dev/sdb \;

no entanto, isso executará sequencialmente mais de um dd se houver mais de um arquivo correspondente. Com efeito, todos, exceto o último dd , serão uma perda de tempo. Para garantir que find pare após o primeiro dd use -quit :

find ~ -iname "*centos*minimal*.iso" -exec dd if={} of=/dev/sdb \; -quit

Nota -quit não é exigido pelo POSIX, seu find pode ou não suportar.

    
por 24.05.2018 / 23:53