Você pode enviar seu comando para o seguinte script awk.
$ rsync -avcn local/ remote/ | awk 'BEGIN {prev="./"} substr($0, 0, (length(prev))) != prev {print $0; prev = $0}'
file1
aaa/
bbb/
Explicação
-
{prev="./"}: antes de começar a ler a entrada, defina a variávelprevpara./(que é a primeira linha da saída). A partir daqui, usaremos essa variável para armazenar o conteúdo da linha anterior. -
substr($0, 0, (length(prev))): extrai umsubstring da linha inteira$0, iniciando no primeiro caractere0e com comprimento desde que a linha anterior(length(prev)). -
!= prev: compara a subcadeia da linha atual com a linha anterior. Essencialmente, isso testa se a linha atual (a substring) começa com a string da linha anterior. Nós não usamos uma regex simples aqui (ancorada no início da linha), porque teríamos que escapar dela. -
{print $0; prev = $0}: se a linha atual faz iniciar com a linha anterior, então ignore-a (ou seja, não a imprima), se ela não for , então é um novo diretório, então imprima toda a linhaprint $0e armazene a nova linha noprevvariableprev = $0.