cp comando para excluir certos arquivos sejam copiados

16

Existe uma maneira de usar o comando 'cp' para copiar um diretório e excluir certos arquivos / subdiretórios dentro dele?

    
por Stephen Jacob 17.08.2013 / 07:07

2 respostas

31

Use rsync :

rsync -av --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

Observe que usar source e source/ é diferente. Uma barra à direita significa copiar o conteúdo da pasta source em destination . Sem a barra final, isso significa copiar a origem da pasta em destination .

Como alternativa, se você tiver muitos diretórios (ou arquivos) para excluir, use --exclude-from=FILE , em que FILE é o nome de um arquivo que contém arquivos ou diretórios a serem excluídos.

--exclude também pode conter curingas, como --exclude=*/.svn*

copiado de: link

Se você quiser usar o cp em si:

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

Isso pressupõe que a estrutura do diretório de destino seja a mesma da fonte.

Copiado de: link

    
por saji89 17.08.2013 / 07:23
2

Tarde no jogo, mas aqui está uma solução muito diferente usando plain bash e cp: você pode usar uma especificação de arquivo global enquanto tem alguns arquivos ignorados.

Suponha que o diretório contenha os arquivos:

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

Usando a variável GLOBIGNORE :

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

Ou com exclusões mais específicas:

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

Ou usando correspondências negativas :

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

Isso também suporta vários padrões incomparáveis:

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3
    
por xenoid 13.06.2016 / 23:27