
Estou reorganizando alguns arquivos no meu disco rígido e tenho uma cópia antiga de uma pasta. O que quero fazer é garantir que todos os arquivos da pasta A (a cópia antiga) existam na pasta B. Cada pasta contém pelo menos 200 arquivos, a maioria dos quais são provavelmente duplicatas.
Advertência: não posso apenas verificar os nomes dos arquivos, também devo garantir que eles tenham o mesmo conteúdo (à la fdupes
).
Verifiquei na página de manual fdupes
se havia alguma maneira de fazer a operação inversa (ou seja, descobrir quais arquivosnãotenho alguma cópia), mas veio de mãos vazias, mesmo que a funcionalidade existisse, ainda tenho arquivos que existem apenas na pasta B.
Essas duas perguntas eram semelhantes, mas o Windows não ajudava muito:
- Como posso encontrar todas as pastas da Pasta A que não existem na Pasta B?
- Exclua arquivos de uma pasta se um arquivo com nome semelhante não existir em outra pasta
Desde já, obrigado.
Responder1
Se você já possui uma lista de arquivos duplicados, basta compará-la com a lista de todos os arquivos para encontrar os únicos:
fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f)
-w
apenas palavras inteiras matemáticas (não substrings, então o arquivoabcd
não é correspondido porabc
)-F
considera os padrões literais, não expressões regulares-f
usa o arquivo especificado (-
neste caso, ou seja, entrada padrão) como uma lista de expressões para correspondência.-v
como você provavelmente sabe, mostra as linhas não correspondentes.
Isso deve gerar uma lista contendo os arquivos encontrados apenas em uma das pastas; deve ser fácil verificar se todos eles estão na pasta B, deslizando ou procurando pelo nome da pasta A (chamada abaixo dir1
) assim:
fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f) | grep -F dir1