remove arquivos duplicados em 2 diretórios

2

Eu tenho duas pastas (com subpastas) contendo arquivos que contêm essencialmente o mesmo conteúdo.

Exemplo:

  • /folder/files/data/new
  • /folder/files/data/old

Existe uma maneira de excluir todos os arquivos em / new que já estão em / old por nome do arquivo estritamente (NÃO modificado na data) para evitar que eu leia novamente arquivos duplicados.

    
por Guest 29.03.2014 / 21:23

1 resposta

5

O código abaixo pesquisará não apenas o diretório old , mas também seus subdiretórios e excluirá os arquivos do diretório new que tem o mesmo nome e caminho. Isso funcionará com todos os nomes de arquivos hostis (espaços, novas linhas, etc):

cd /folder/files/data/old || { echo "Failed to get in correct directory" ; exit 1 ; }
find . -type f -exec rm -f ../new/{} \;

O argumento -type f indica find para procurar por arquivos, não por diretórios. O argumento -exec ... \; informa find que, depois de encontrar um arquivo em old , deve executar o comando rm -f em sua contraparte no subdiretório new .

Como rm recebe a opção -f , ele ignorará silenciosamente os arquivos que não existem. Isso elimina a necessidade de testar a existência do arquivo em new antes de tentar excluí-lo. Além disso, ele não será avisado antes de excluir arquivos. Isso é muito útil ao excluir um grande número de arquivos. No entanto, certifique-se de que realmente deseja excluir os arquivos antes de executar este script . Para proteção, o script sairá com um erro com um erro se o comando cd falhar.

    
por 30.03.2014 / 04:01

Tags