Procurando pelo comando bash para localizar e copiar recursivamente somente arquivos de uma hierarquia de diretórios para outra

0

É possível executar um comando usando o bash que substituirá todos os arquivos em uma estrutura de diretório por todos os arquivos em outra. Por exemplo, se eu tiver essas duas estruturas de diretórios:

dest
dest/A
dest/A/B
dest/A/B/file-1
dest/A/B/file-2
dest/A/B/file-3
dest/A/B/C
dest/A/B/C/file-4
dest/A/B/C/file-5

patch/
patch/A
patch/A/B
patch/A/B/file-2
patch/A/B/C
patch/A/B/C/file-6

... então eu posso executar algum tipo de comando find / copy / xargs / sed piped que irá copiar cada arquivo sob o diretório patch para sua localização correspondente no diretório dest? Se eu apenas cp -r patch/A/B dest/A/B , então eu vou perder os arquivos dest/A/B/file-1 e dest/A/B/file-3 etc.

Editar:

Eu tentei executar comandos por exemplo, por exemplo find -type f | xargs -I {} cp {} ... , mas eu não sou muito experiente com comandos de shell e nada funcionou (o ... no final do comando foi principalmente experimentos com sed para transformar o caminho de arquivo substituindo o ./ por dest/ ) .

    
por RTF 04.12.2014 / 17:36

1 resposta

3

Você pode simplesmente usar o rsync para conseguir isso; %código% (observe que os sinalizadores preservarão os privilégios de proprietário, grupo e segurança).

Devo acrescentar que a sua declaração, a partir da qual acredito que todo o seu problema surge, "Se eu apenas rsync -Aax /input/directory/path /output/directory/path , então eu vou perder os arquivos cp -r patch/A/B dest/A/B e dest/A/B/file-1 etc" não é preciso; você também pode simplesmente executar dest/A/B/file-3 e conseguir o que parece estar procurando (nenhum arquivo já existente será removido)

    
por 04.12.2014 / 18:13