Como selecionar os mesmos arquivos em duas pastas diferentes

1

Eu estou tentando compilar o CyanogenMod e nos arquivos do fornecedor eu tenho que encontrar manualmente os mesmos arquivos e copiá-los. Em uma pasta, existem mais de 400 arquivos e é muito difícil copiá-los um a um.

Eu estava pensando se há uma maneira de selecionar os arquivos comuns em ambas as pastas? Isso tornará minha vida muito mais fácil.

    
por Tanuj Singh 30.05.2016 / 06:16

4 respostas

0

Na linha de comando, você pode usar o comando MV e alguns curingas.

Mova todos os arquivos nos subdiretórios dirs para aqui

mv dir/*/* here   

Mesmas, mas apenas arquivos começando com o prefixo

mv dir/*/prefix* here
    
por Amias 30.05.2016 / 09:16
0

Se você tiver que encontrar os mesmos arquivos, também poderá ver fdupes e analisar sua saída. Ele verifica se dois (ou mais) arquivos são realmente os mesmos, mesmo que eles não tenham o mesmo nome de arquivo.

Você pode combiná-lo com algo que compara os nomes dos arquivos.

(Nota: usar fdupes para apagar arquivos redundantes pode ser perigoso - por exemplo, com DVDs copiados. Cada faixa de DVD tem um arquivo de legenda e seu backup, que são idênticos, mas têm um sufixo de nome diferente. reproduzir os DVDs se um dos arquivos estiver faltando. Então eu tenho que reconstruir esses arquivos ...)

    
por user258532 30.05.2016 / 09:29
0

solução:

diff -sqr dir1 dir2 | grep identical | awk '{print $2}'

explicação:

diff pode gerar diferenças por nomes de arquivos. Exemplo

diff -sqr dir1 dir2

Files dir1/fileX.txt and dir2/fileY.txt differ
Only in dir1: griveTest.txt
Files dir1/Test.odt and dir2/Test.odt are identical

para obter apenas os arquivos idênticos, use grep:

diff -sqr dir1 dir2 | grep identical 

Files dir1/Test.odt and dir2/Test.odt are identical

agora para obter apenas o nome do arquivo use awk para obter a segunda coluna:

diff -sqr dir1 dir2 | grep identical | awk '{print $2}'

dir1/Test.odt
    
por TmTron 30.05.2016 / 15:59
0

O que você provavelmente está procurando é:

rsync -a --existing source/ destination

Aqui, a opção --existing garante que apenas os arquivos já presentes no diretório destination sejam copiados do diretório source

-a torna a cópia recursiva e preserva os links simbólicos, especial & amp; arquivos de dispositivo, horários de modificação, grupo, proprietário e permissões

Se você quiser executar uma execução a seco para ver o que será copiado, use:

rsync -nav --existing source/ destination

Em ambos os casos, observe que não há barra após especificar o diretório de destino.

    
por Jedi 02.06.2016 / 12:28