Se eu entendi corretamente, você deseja comparar arquivos em dois diretórios e copiar os arquivos com conteúdo diferente para um terceiro diretório. Eu não vejo uma maneira de fazer isso com apenas um comando (a menos que você escreva seu próprio script ou função). Mas um dos pontos strongs do bash shell é que você pode encadear comandos, usando a saída de um comando como a entrada do próximo.
Primeiro, você pode usar o diff como de costume:
diff -q dir1/ dir2/
Isso lhe dará uma saída ao longo das linhas de
Files dir1/file2.txt and dir2/file2.txt differ
Files dir1/file3.txt and dir2/file3.txt differ
Agora, você precisa extrair os caminhos de arquivo dessa saída. Você pode usar vários comandos para fazer isso, cut
, grep
, sed
, awk
ou outros. Vou usar awk
neste exemplo e extrair os arquivos de dir2
:
diff -q dir1 dir2 | awk -n '{ print $4 }'
A saída deste pipeline seria algo como
dir2/file2.txt
dir2/file3.txt
Essa saída agora pode ser enviada para xargs
da seguinte forma:
diff -q dir1 dir2 | awk -n '{ print $4 }' | xargs -d '\n' -I {} cp {} target-dir/
Por favor, note que este método só funciona quando os arquivos diferentes existem em ambos os diretórios. Se houver um arquivo que exista apenas em um dos dois diretórios, a saída diff
s será diferente, o que fará com que o corte do nome do arquivo falhe. Além disso, os nomes dos arquivos não devem conter espaços, porque isso também traria o corte.