ti-enxame.com

copiar recursivamente exceto diretório oculto

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

13
uray

Você pode simplesmente copiar tudo com

cp -rf 

e, em seguida, exclua os 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, GNU tar), você pode tentar usar o tar para excluir alguns padrões. Mas temo 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, GNU tar tem um Zoo de opções de estilo de exclusão. Meu favorito é

--exclude-vcs
6
maxschlepzig

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

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

    rsync -a --exclude='.*' /source/ /destination
    
  • pax: ele tem alguns recursos de exclusão e está em POSIX, então deve estar disponível em qualquer lugar (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
    
30

alternativamente para cp você pode usar rsync com um --exclude=PATTERN.

8
xenoterracide