Remover arquivos com o mesmo nome da subpasta

0

Dado o seguinte layout, como posso excluir arquivos nas pastas Attic que possuem um arquivo correspondente na pasta pai? (Os arquivos terão o mesmo nome, não necessariamente o mesmo conteúdo)

/folder1
    /Attic
        fileA.txt,v  (problem file)
    fileA.txt,v
    fileB.txt,v
    FileC.txt,v
/folder2
    /Attic
        fileD.txt,v  (another problem file)
        fileX.txt,v  (NOT a problem file)
    fileD.txt,v
    fileE.txt,v
    FileF.txt,v

Background: Estou tentando limpar um repositório CVS para migrar para o git. O CVS cria uma pasta 'Attic' para arquivos excluídos. Nos últimos 10 anos, algumas coisas ruins aconteceram, o que significa que alguns arquivos com o mesmo nome existem em pastas vivas e mortas. Eu estou totalmente ciente dos riscos e implicações. Eu fiz backup dos meus dados e estou trabalhando em uma cópia.

    
por Denham Coote 27.06.2016 / 17:52

1 resposta

2

No bash:

shopt -s globstar;
for file in ./**/Attic/*; do
    if [[ -e ${file%/*/*}/${file##*/} ]]; then
        rm -vf "$file";
    fi;
done;

Com globstar ativado, ** corresponde aos arquivos recursivamente (independentemente da profundidade). ${var#text} e ${var%text} permitem remover o prefixo ou sufixo de uma variável, portanto ${file%/*/*} resulta no nome do diretório (menos "/ Attic /…"), enquanto ${file##*/} é o nome do arquivo base.

Você também deve considerar ferramentas como cvs-fast-export e reposurgeon ; Eu esperaria que eles lidassem corretamente com tais situações desde o começo. Se não, então, pelo menos, certifique-se de ter a versão mais recente de cvs2git ...

    
por 28.06.2016 / 12:00