bash scripting, executa comandos em todas as subpastas com seleções

0

Eu preciso executar este comando

trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap

para todos os subdiretórios seguindo o padrão de nomenclatura de us_0.0, us_-0.2, us_-0.4 ... us_-3.8 . O comando também me pedirá para fazer uma seleção assim que eu executar, e a resposta também será 0. Como exatamente eu deveria fazer o script em bash?

    
por Colin 02.06.2014 / 23:36

1 resposta

1

Se você quer dizer que precisa passar cada diretório para stdin:

convAll ()
{
  while read line
  do
    echo -e "$line\n0" | trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap
  done
}

ls | grep -E 'us_-?[0-9]\.[0-9]+' | convAll
# NOTE: There's probably an even shorter one-liner version of this that uses 'xargs', but
#       I'll leave that as an exercise to the reader.

Se você quer dizer que precisa passar cada diretório como um argumento adicional:

ls | grep -E 'us_-?[0-9]\.[0-9]+' | tr '\n' '
convAll ()
{
  while read line
  do
    (\
       cd "$line" && \
       trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap || \
       echo "Command failed for '$line'." >&2 \
    )
  done
}

ls | grep -E 'us_-?[0-9]\.[0-9]+' | convAll
' | \ xargs -0 -n 1 trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap

Se você quer dizer que precisa de cd em cada diretório:

convAll ()
{
  while read line
  do
    echo -e "$line\n0" | trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap
  done
}

ls | grep -E 'us_-?[0-9]\.[0-9]+' | convAll
# NOTE: There's probably an even shorter one-liner version of this that uses 'xargs', but
#       I'll leave that as an exercise to the reader.
    
por 02.06.2014 / 23:54