Comando shell do Linux para comparar dois diretórios e remover dupes

0

Como parte de um aplicativo que estou desenvolvendo, preciso remover quaisquer arquivos no diretório A que já estejam no diretório B. Pensei no rsync, mas não consigo impedir que ele copie os arquivos que estão faltando da origem para o destino .

Um exemplo do que estou procurando

ou seja,

    /dir1/apple
    /dir1/orange
    /dir1/banana 

e

    /dir2/orange    

Após o comando, eu teria:

    /dir1/apple
    /dir1/banana 

e

    /dir2/orange  
    
por Roger W. 23.11.2013 / 14:29

1 resposta

1

Faça um loop sobre cada arquivo no diretório 2 e tente remover o equivalente com o mesmo nome de arquivo ( basename ) no diretório 1.

for f in dir2/*; do echo rm -f -- dir1/"$(basename "$f")"; done

Observe que rm -f não causa erros nos arquivos que não são encontrados. Remova o echo quando tiver certeza de que removeria as coisas certas.

Se você quiser chamar apenas rm nos arquivos existentes, teste se eles estão em dir1 com [[ -f … ]] .

for f in dir2/*; do del=dir1/"$(basename "$f")"; [[ -f "$del" ]] && rm -- "$del"; done
    
por 23.11.2013 / 14:39

Tags