copier récursivement sauf le répertoire caché

13

Comment copier récursivement comme cp -rf *, mais en excluant les répertoires cachés (répertoires commençant par.) Et leur contenu?

uray
la source

Réponses:

6

Vous pouvez simplement tout copier avec

cp -rf 

puis supprimez les répertoires cachés à la destination avec

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

Alternativement, si vous avez du tar avancé (par exemple GNU tar), vous pouvez essayer d'utiliser tar pour exclure certains modèles. Mais je crains qu'il ne soit pas possible d'exclure uniquement les répertoires cachés, mais d'inclure des fichiers cachés.

Par exemple quelque chose comme ça:

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

Btw, GNU tar a un zoo d'options de style d'exclusion. Mon préféré est

--exclude-vcs
maxschlepzig
la source
30

Les bonnes options pour copier une arborescence de répertoires, à l'exception de certains fichiers, sont:

  • rsync : c'est essentiellement cp plus une tonne de possibilités d'exclusion.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : il a quelques capacités d'exclusion, et il est en POSIX donc devrait être disponible partout (sauf que certaines distributions Linux ne l'incluent pas dans leur installation par défaut pour une raison quelconque).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
Gilles 'SO- arrête d'être méchant'
la source
8

alternativement , cpvous pouvez utiliser rsyncavec --exclude=PATTERN.

xénoterracide
la source