Filtrando caminhos para uma profundidade específica

2

Estou usando o rsync e os sinalizadores -nPaAXz ~/ para verificar quais arquivos serão copiados.

Isso é muito detalhado para fazer algum sentido.

Como eu poderia filtrar a saída para ver a lista de arquivos / pastas que serão copiados para uma determinada profundidade, por exemplo:

1 pasta de profundidade

/home/afile
/home/afolder/
/home/anotherfolder/

2 pastas profundas

/home/afile
/home/afolder/afile
/home/afolder/anotherfile
/home/afolder/afolder/
/home/anotherfolder/afile
    
por Acorn 07.03.2011 / 19:01

4 respostas

3

Esse comando pega cada caminho e o trunca para n pastas profundas (definido na seção \{0,n\} do comando sed e na seção {0,n} do comando grep). É então canalizado para uniq para filtrar as duplicatas.

rsync -nPaAXz src_dir dst_dir | sed -n 's@^\(\([^/][^/]*/\)\{0,2\}\).*@@p' | uniq

A mesma coisa também pode ser obtida usando grep :

rsync -nPaAXz src_dir dst_dir | grep -oE "^([^/]+/){0,2}"

Embora o acima não funcione com GNU grep versions < 2.5.3 devido a um bug .

    
por 09.03.2011 / 03:31
3

O seguinte grep irá restringir a saída detalhada do rsync a uma profundidade de 2 pastas:

rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'

Altere o {0,2} acima para {0,3} para filtrar três pastas em profundidade. {0,4} irá filtrar 4 pastas em profundidade, etc.

    
por 08.03.2011 / 09:46
1

Nesse caso, você só deseja filtrar a saída e não se preocupa em reutilizar os valores de alguma forma. Isso é fácil, então: apenas trace linhas que contenham mais barras do que você deseja.

    
por 07.03.2011 / 19:50
1
rsync -nPaAXz src_dir dst_dir | cut -d "/" -f 1-4 | awk '!x[$0]++'
O

recorte remove tudo depois de 4 pastas profundas e o awk remove as duplicatas.

    
por 25.12.2016 / 09:18