Encontre e liste diretórios duplicados

4

Eu tenho um diretório com vários subdiretórios e gostaria de encontrar duplicatas. A estrutura da pasta é algo como isto:

└── Top_Dir
    └── Level_1_Dir
        ├── standard_cat
        │   ├── files.txt
        ├── standard_dog
        │   └── files.txt
        └── standard_snake
            └── files.txt
    └── Level_2_Dir
        ├── standard_moon
        │   ├── files.txt
        ├── standard_sun
        │   └── files.txt
        └── standard_cat
            └── files.txt
    └── Level_3_Dir
        ├── standard_man
        │   ├── files.txt
        ├── standard_woman
        │   └── files.txt
        └── standard_moon
            └── files.txt

Com o exemplo acima, gostaria de ver uma saída de:

/top_dir/Level_1_Dir/standard_cat
/top_dir/Level_2_Dir/standard_cat
/top_dir/Level_2_Dir/standard_moon
/top_dir/Level_3_Dir/standard_moon

Eu tenho feito algumas pesquisas sobre como fazer isso por meio do bash e não consegui nada. Alguém sabe uma maneira de fazer isso?

    
por dino 09.06.2016 / 05:21

1 resposta

1

Isso funcionou usando o bash no Ubuntu. Ele apenas corresponde a diretórios duplicados, independentemente da profundidade da árvore. A parte dentro do $ () constrói uma lista de nomes de diretórios separados por pipe contando duplicatas na última coluna de ls -l . Esta lista separada por pipe é filtrada usando grep na lista de todos os diretórios. Além disso, não contabilizar outros arquivos (não usou correspondência de palavras inteiras etc.)

> ls -lR Top_Dir/ | grep -E $(ls -lR Top_Dir/ | grep ^d | rev | cut -d" " -f1 | rev | sort | uniq -d | head -c -1 | tr '\n' '|') | grep -v ^d | sed 's/://'

Top_Dir/Level_1_Dir/standard_cat

Top_Dir/Level_2_Dir/standard_cat

Top_Dir/Level_2_Dir/standard_moon

Top_Dir/Level_3_Dir/standard_moon

    
por 09.06.2016 / 06:10