copiar recursivamente excepto directorio oculto

13

¿Cómo copio recursivamente me gusta cp -rf *, pero excluyendo directorios ocultos (directorios que comienzan con) y sus contenidos?

uray
fuente

Respuestas:

6

Podrías copiar todo con

cp -rf 

y luego eliminar directorios ocultos en el destino con

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

Alternativamente, si tiene algo de 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 de exclusión. Mi favorito es

--exclude-vcs
maxschlepzig
fuente
30

Las buenas opciones para copiar un árbol de directorios a excepción de 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
    
Gilles 'SO- deja de ser malvado'
fuente
8

Alternativamente a cpusted podría utilizar rsynccon un --exclude=PATTERN.

xenoterracida
fuente