it-swarm-es.tech

copiar recursivamente excepto directorio oculto

¿Cómo copio de forma recursiva como cp -rf *, pero excluyendo directorios ocultos (directorios que comienzan con.) y su contenido?

13
uray

Podrías copiar todo con

cp -rf 

y luego elimine los directorios ocultos en el destino con

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

Alternativamente, si tiene algún tar avanzado (por ejemplo, GNU tar), podría intentar usar tar para excluir algunos patrones. Pero me temo que no es posible excluir solo directorios ocultos, sino incluir archivos ocultos.

Por ejemplo, algo como esto:

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

Por cierto, GNU tar tiene un zoológico de opciones de estilo excluidas. Mi favorito es

--exclude-vcs
6
maxschlepzig

Buenas opciones para copiar un árbol de directorios, excepto algunos archivos, son:

  • rsync: esto es básicamente cp más un montón de posibilidades de exclusión.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax: tiene algunas capacidades de exclusión, y está en POSIX, por lo que debería estar disponible en todas partes (excepto que algunas distribuciones de Linux no lo incluyen en su instalación predeterminada por alguna razón).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    

alternativamente a cp puede usar rsync con un --exclude=PATTERN.

8
xenoterracide