Est-il possible d'utiliser la commande 'cp' pour copier un répertoire et exclure certains fichiers / sous-répertoires qu'il contient?
Est-il possible d'utiliser la commande 'cp' pour copier un répertoire et exclure certains fichiers / sous-répertoires qu'il contient?
Réponses:
Utiliser rsync:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
Notez que l'utilisation sourceet source/sont différentes. Un slash de fin signifie que le contenu du dossier est copié sourcedans destination. Sans la barre oblique finale, cela signifie que vous devez copier la source du dossier destination.
Par ailleurs, si vous avez beaucoup de répertoires (ou fichiers) à exclure, vous pouvez utiliser --exclude-from=FILE, où FILEest le nom d'un fichier contenant des fichiers ou des répertoires à exclure.
--exclude peut également contenir des caractères génériques, tels que --exclude=*/.svn*
Copié à partir de: https://stackoverflow.com/a/2194500/749232
Si vous voulez vous utiliser cp:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Cela suppose que la structure du répertoire cible est identique à celle du source.
Copié à partir de: https://stackoverflow.com/a/4586025/749232
Tard dans le jeu, voici une solution très différente utilisant plain bash et cp: vous pouvez utiliser une spécification de fichier globale tout en ignorant certains fichiers.
Supposons que le répertoire contient les fichiers:
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
En utilisant la variable GLOBIGNORE :
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
Ou avec des exclusions plus spécifiques:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
Ou en utilisant des correspondances négatives :
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
Cela prend également en charge plusieurs modèles inégalés:
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3
shopt -s extglobvous n'avez pas non plus besoin d'exporterGLOBIGNORE: il est supposé modifier le comportement du shell actuel, la plupart des programmes enfants ne s'en soucient pas.