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?

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

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
    

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.