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ávelprev
para./
(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 umsubstr
ing da linha inteira$0
, iniciando no primeiro caractere0
e 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 $0
e armazene a nova linha noprev
variableprev = $0
.