Abaixo estão duas soluções, dependendo de como definimos "duplicado":
- Arquivos com o mesmo caminho relativo ou
- Arquivos com o mesmo conteúdo, mas não necessariamente com o mesmo nome
Se por "duplicado" queremos dizer dois arquivos que compartilham o mesmo caminho relativo , você pode usar find
e xargs
para remover as duplicatas. Por exemplo, suponha que você tenha
~/tmp% tree A
A
└── Excellent
├── bar
├── baz
└── foo
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
│ ├── bar
│ ├── baz
│ └── foo
└── Good
Então
find /home/unutbu/tmp/A -depth -type f -print0 | xargs -0 -I{} bash -c 'rm "/home/unutbu/tmp/B${1#*A}"' - {}
resulta em
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
└── Good
Ou, se por "duplicado" queremos dizer que dois arquivos compartilham o mesmo conteúdo , embora talvez não seja o mesmo nome de arquivo, você pode usar rdfind
:
sudo apt-get install rdfind
Se tivermos essa estrutura de diretório:
~/tmp% tree A
A
└── Excellent
├── bar
├── baz
└── foo
1 directory, 3 files
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
│ ├── barbar
│ ├── bazbaz
│ └── foofoo
└── Good
em que barbar
tem o mesmo conteúdo que bar
e, da mesma forma, para bazbaz
e foofoo
, então
rdfind -deleteduplicates true A B
resulta em
~/tmp% tree B
B
├── Bad
│ └── quux
├── Excellent
└── Good
Solução alternativa caso sua versão do Ubuntu não inclua rdfind:
Você poderia usar fdupes
:
sudo apt-get install fdupes
fdupes --recurse --delete --noprompt A B