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
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.
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
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 ...)
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
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.