copiar recursivamente, exceto diretório oculto

13

Como copio recursivamente cp -rf *, mas excluindo diretórios ocultos (diretórios começando com.) E seu conteúdo?

uray
fonte

Respostas:

6

Você pode copiar tudo com

cp -rf 

e exclua os diretórios ocultos no destino com

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

Como alternativa, se você tiver algum tar avançado (por exemplo, GNU tar), tente usar o 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 como isto:

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

Aliás, o GNU tar possui um zoológico de opções de estilo de exclusão. Meu favorito é

--exclude-vcs
maxschlepzig
fonte
30

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

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

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : possui alguns recursos de exclusão e está no POSIX, portanto deve estar disponível em qualquer lugar (exceto que algumas distribuições Linux não o incluem em sua instalação padrão por algum motivo).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
Gilles 'SO- parar de ser mau'
fonte
8

Como alternativa, cpvocê pode usar rsynccom um --exclude=PATTERN.

xenoterracida
fonte