fdupes - apaga arquivos depois de comparar dois diretórios

5

Atualmente, estou tentando resolver um problema usando fdupes . Eu gostaria de comparar duas pastas umas com as outras e depois excluir todos os arquivos duplicados dentro de um desses diretórios.

Exemplo:

Os arquivos estão sendo armazenados automaticamente em /srv/ - muitos duplicados. Eles serão todos deixados intocados. Eu também tenho um diretório chamado /watchfolder/ e desejo remover todos os arquivos em watchfolder se eles existirem em /srv/ .

Eu tentei fdupes -r srv/ watchfolder/ e o contrário. Mas continua mexendo com meus arquivos em srv/ .

    
por Chris Terrific 23.07.2014 / 21:52

2 respostas

4

Filtrar quando recorrer a Fdupes

Se você tiver mais de uma duplicata, poderá acabar com algo como:

srv/foo                               
srv/a/b/foo
watchfolder/foo
watchfolder/c/foo
watchfolder/d/foo

Nesse caso, você precisa alimentar a lista de duplicatas em um filtro ou script de shell para aplicar algumas regras mais inteligentes, a menos que deseje apenas preservar a primeira duplicata encontrada (por exemplo, a correspondência menos profundamente aninhada em srv) . Se é isso que você quer, então:

fdupes --recurse --delete srv/ watchfolder/

funcionaria. Para situações mais complexas, como a intenção de preservar tudo em srv /, considere um filtro como:

fdupes --recurse srv/ watchfolder/ | sed '/^srv/d; /^$/! s/.*/"&"/' | xargs rm
    
por 23.07.2014 / 22:34
2

O fdupes manterá o primeiro arquivo, como no arquivo com o timestamp mais antigo. É um pouco enganador no que afirma na ajuda.

$ ll foo/ bar/
bar/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy   2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:22 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:23 c

foo/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy   2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:11 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:22 c

$ fdupes foo/ bar/
foo/b                                   
bar/b

foo/c
bar/c
# in above foo/b and foo/c would be kept

$ cp bar/c foo/c
$ fdupes foo/ bar/
bar/c                                   
foo/c

foo/b
bar/b
# in above foo/b and bar/c would be kept,
# as bar/c has an earlier timestamp than foo/c now
    
por 23.07.2014 / 22:17