Pegue toda a estrutura de arquivos, mas esses diretórios

3

Eu quero copiar toda uma estrutura de arquivos (com milhares de arquivos e centenas de diretórios), é uma hierarquia de diretórios e existem aqueles node_modules que desejo excluir do processo de cópia.

Existe um comando Unix para copiar de um diretório e todos os seus arquivos e subdiretórios recursivamente com uma opção para dizer não incluir os diretórios com o nome <name> ?

Algo como:

cp root/ rootCopy/ --except node_modules

?

Se não, existe uma maneira simples de fazer isso a partir da linha de comando sem escrever um bash ou algo assim?

    
por vdegenne 30.12.2016 / 08:11

2 respostas

8

Você pode tentar com o comando rsync ou tar .

Veja este ou este post.

Na rsync página do manual

    --exclude=PATTERN       exclude files matching PATTERN
    --exclude-from=FILE     read exclude patterns from FILE
rsync -avz --exclude 'dir*' source/ destination/
    
por 30.12.2016 / 08:16
2

Método assustador, mas funciona para mim:

(find source|egrep -v "node_modules|^source/exact/node_plugin" && echo tmptarget)|xargs cp --parents
mv tmptarget/source target

Explicação, se necessário. cp funciona assim:

cp source1 source2 ... sourceN target
  • Então, faça o find para imprimir toda a sua estrutura.
  • Use egrep para excluir todas as ramificações indesejadas. Certifique-se de ter formado corretamente o seu padrão. Use ^ e caminho completo se você quiser excluir a ramificação exata ou apenas node_modules se quiser excluir todas elas.
  • imprima a pasta de destino com o comando echo .
  • Deixe xargs colocar todas essas linhas no comando cp para você
  • --parents é necessário para criar pastas pais, porque não podemos usar a opção -r aqui, pois isso irá bagunçar tudo na pasta de destino.
  • E finalmente mv toda nova estrutura para o destino real
por 30.12.2016 / 08:48

Tags