Como copiar alguns arquivos, mas não todos?

Como copiar alguns arquivos, mas não todos?

Portanto, você pode usar o *como curinga para todos os arquivos ao usar cpno contexto de um diretório. Existe uma maneira de copiar todos os arquivos, exceto xo arquivo?

Responder1

Rsync lida bem com isso.

Exemplo copiar tudo:rsync -aP /folder1/* /folder/2

Exemplo de copiar tudo com exclusão:rsync -aP --exclude=x /folder1/* /folder2/

O -aPinterruptor:

  • a: semelhante a cp -a, recursivo, etc.
  • P: mostra o progresso, um recurso interessante do rsync.

Responder2

Em bashvocê pode usar extglob:

 $ shopt -s extglob  # to enable extglob
 $ cp !(b*) new_dir/

onde !(b*)exclui todos b*os arquivos.

Você pode desativar posteriormente extglobcom

 $ shopt -u extglob

Responder3

Este não é um recurso do cp, é um recurso do seu shell (ele expande o *para significar todos os arquivos que não são pontos), portanto a resposta depende de qual shell você está usando. Por exemplo, zshsuporta esta sintaxe:

$ cp ^x /path/to/destination

Onde ^xsignifica "todos os arquivos, exceto x"

Você também pode combinar padrões de seleção e desseleção, por exemplo, para copiar todos os arquivos wav, exceto aqueles que contêm xyz, você pode usar:

cp *.wav~*xyz*

Responder4

Também pode ser feito no antigo shell bourne (portátil/compatível) de várias maneiras com ferramentas padrão de maneiras muito menos elegantes do que usando globbing de shell avançado ou comandos com opções de exclusão integradas.

Se não houver muitos arquivos (e não com nomes incluindo espaços e/ou quebras de linha), esta pode ser uma maneira:

cp `ls | egrep -v '^excludename$'` destdir/.

Claro, bashe as ferramentas GNU são ótimas e poderosas, mas ainda nem sempre estão disponíveis. Se você pretende colocá-lo em um script portátil, recomendo findcomo no comentário de Rush.

informação relacionada