comando cp para excluir a exclusão de certos arquivos

35

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

Stephen Jacob
fonte

Respostas:

57

Use rsync:

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

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

Como alternativa, se você tiver muitos diretórios (ou arquivos) a serem excluídos, poderá usar --exclude-from=FILE, onde 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: https://stackoverflow.com/a/2194500/749232

Se você deseja usar- cpse:

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

Isso pressupõe que a estrutura do diretório de destino seja igual à da origem.

Copiado de: https://stackoverflow.com/a/4586025/749232

saji89
fonte
3

No final do jogo, mas aqui está uma solução muito diferente usando o bash e o cp: você pode usar uma especificação de arquivo global enquanto alguns arquivos são 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
xenoid
fonte
1
Para correspondências negativas, você precisa ter os globs estendidos ativados:, shopt -s extglobtambém não precisa exportar GLOBIGNORE: deve modificar o comportamento do shell atual, a maioria dos programas filhos não se importaria com isso.
Muru