copia recursivamente, exceto o diretório oculto

12

Como faço para copiar recursivamente como cp -rf * , mas excluindo diretórios ocultos (diretórios que começam com.) e seu conteúdo?

    
por uray 18.09.2010 / 20:21

3 respostas

6

Você pode simplesmente copiar tudo com

cp -rf 

e exclua diretórios ocultos no destino com

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

Alternativamente, se você tiver algum tar avançado (por exemplo, o GNU tar), você poderia tentar usar tar para excluir alguns padrões. Mas receio que não seja possível excluir apenas diretórios ocultos, mas incluir arquivos ocultos.

Por exemplo, algo assim:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Btw, o GNU tar tem um zoológico de opções de estilo de exclusão. Meu favorito é

--exclude-vcs
    
por 18.09.2010 / 20:36
25

Boas opções para copiar uma árvore de diretórios, exceto alguns arquivos, são:

  • rsync : é basicamente cp mais uma tonelada de possibilidades de exclusão.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : ele tem alguns recursos de exclusão, e é em POSIX, portanto deve estar disponível em todos os lugares (exceto que algumas distribuições do Linux não o incluem em sua instalação padrão por algum motivo).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
por 19.09.2010 / 00:29
7

em alternativa, para cp , pode utilizar rsync com --exclude=PATTERN .

    
por 18.09.2010 / 21:20