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 source
et source/
sont différentes. Un slash de fin signifie que le contenu du dossier est copié source
dans 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ù FILE
est 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 extglob
vous 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.