Imprimir o commnd executado pelo shell

1

Eu estou tentando copiar os arquivos não presentes em um diretório para o outro diretório usando o awk

diff -r dir1 dir2 | grep dir1 | awk '{$1=$2=$3 =""; print "cp \"./dir1/" substr($0,4) "\" ./dir2/"}' | sh

Isso funciona bem, exceto que eu também quero imprimir o arquivo que está sendo copiado. Algo parecido com cp ./dir1/file1.txt ./dir2/ on stdout

Como faço isso? Eu sei que é simples, mas não consigo descobrir. Eu tentei os comandos tee e echo , mas em vão.

    
por Rohit Walavalkar 19.11.2016 / 14:36

2 respostas

2

Você pode usar |sh -x . De man page:

 -x xtrace
         Write each command (preceded by the value of the PS4 variable
         subjected to parameter expansion and arithmetic expansion) to
         standard error before it is executed.  Useful for debugging.

Assim, o shell será impresso no comando stderr all executado. E você poderia usar o redirecionamento stderr, como |sh -x 2>commands_list.txt para obter lista de comandos em arquivos separados.

    
por 19.11.2016 / 16:20
2

cp pode dizer o que está fazendo também, é opção

-v, --verbose
          explain what is being done

imprime para calcular quais arquivos são copiados onde, na forma:

‘file1’ -> ‘file2’
    
por 20.11.2016 / 09:14